[MySql] Formulierung einer Abfrage
-
Hi,
ich habe eine Tabelle mit einem Primary Key (Bez: ZeilenNr) (Int und auto_increment). Dann ist da noch eine Spalte (Bez: RecNr), in der ein Wert zw. 0 und 255 steht (Die Werte sind fortlaufend).
Jetzt hab ich das Problem, dass ich alle ZeilenNr herausfiltern soll, in denen die RecNr nicht mehr forlaufend nummeriert sind. (D.h. die Differenz nicht mehr 1 oder 255 ist.)Ich hab aber nicht mal den Ansatz einer Idee, wie ich die Anfrage formulieren soll. Könnt ihr mir helfen?
Thx, Maffe
-
Kannst du dazu mal ein Beispiel aufzeigen? Also ein paar Datensätze, die in der Tabelle stehen könnten und dann die Datensätze markieren, die rausgefiltert werden sollen.
-
SELECT t2.id AS exc_id FROM tabelle AS t1 LEFT JOIN tabelle AS t2 ON t2.id - 1 = t1.id WHERE t2.RecNr - 1 != t1.RecNr
würde ich jetzt mal so auf Anhieb sagen...
-
Ein Beispiel:
ZeilenNr | RecNr | <weitere Spalten> ----------------------------------- 1 | 18 | .... 2 | 19 | .... 3 | 20 | .... 4 | 21 | .... 5 | 22 | .... 6 | 24 | .... 7 | 25 | .... 8 | 26 | .... 9 | 28 | .... 10 | 29 | ....
Wie ihr sehen könnt stimmen die Abstände bei den Zeilen 5 & 6 und 8 & 9 nicht mehr überein. Mein Ziel ist jetzt über eine Abfrage die Zeilen 6 & 9 zu erhalten.
Das Problem ist, das die RecNr mit einem beliebigen Wert zw. 0 und 255 anfangen kann. Wenn RecNr 255 erreicht hat, geht es bei 0 weiter.@Mis2com:
Ich glaube nicht, dass deine Abfrage funktioniert, weil sie mit 2 Tabellen arbeitet. Ich hab sie aber auch noch nicht ausprobiert.
-
Er verknüpft ja nur diese Tabelle mit sich selbst - ohne das wird es wohl kaum gehen. Gleich das angewandt, was uns Sa(n)dman hier beigebracht hat:
SELECT t1.* FROM tabelle AS t1 LEFT JOIN tabelle AS t2 ON t2.RecNr = t1.RecNr -1 WHERE t2.RecNr IS NULL ORDER BY t1.RecNr ASC
Wenn du die erste Zeile nicht haben willst kannst du sie entweder übergehen (oder hinten noch ein Limit anhängen)