Verwenden Sie MySQL, um den nächsten Datensatz nach einem übereinstimmenden Wert ohne eine sequenzielle RowID auszuwählen

387
Martini002

Wie kann ich alle Zeilen neben der Zeile auswählen, die der Bedingung entsprechen? In Anbetracht dessen gibt es keine sekundäre RowID wie ID Field

Dies ist die Tabellenstruktur mit 10 Zeilen, aber die Anzahl der Zeilen wird in der Zukunft zunehmen.

Klartext:

ID Date N1 1 DateTime 9  2 DateTime 2 3 DateTime 5 4 DateTime 9 5 DateTime 3 6 DateTime 6 7 DateTime 7 8 DateTime 9 20 DateTime 3 //Sequence broken 21 DateTime 9 

Hinweis: Die Zeichenfolge "DateTime" ist nur symbolisch. Dies ist eine beliebige Datumszeit.

Ich versuche die erste N1- Nummer nach der Nummer zu kennen: 9

Ich habe mehrere Möglichkeiten ausprobiert, aber das Ergebnis ist nicht das, was ich brauche.

Das erwartete Ergebnis ist:

ID Date N1 2 DateTime 2 5 DateTime 3 20 DateTime 3 

Eine einfache Möglichkeit, dies zu erreichen, wurde in dieser Frage veröffentlicht, jedoch nur, wenn die RowID die Sequenz beibehält.

1

1 Antwort auf die Frage

0
Pimp Juice IT

Sie können mit der Variablen zwei temporäre Tabellen erstellen, @row_numindem Sie einen Index pro Zeilennummer erstellen. Sie wird unabhängig von den RowIDWerten jeweils um eins erhöht . Dann wählen Sie aus dieser temporären Tabelle row_num+1aus, wo der N1Wert gleich ist 9. Dort wählen Sie die Spalten idund N1explizit aus, wobei die row_numWerte übereinstimmen und Sie das gewünschte Ergebnis erhalten.

SQL-Abfrage

SET @row_num:=0; DROP TABLE IF EXISTS t1; CREATE TEMPORARY TABLE t1 (SELECT @row_num:=@row_num+1 AS row_num, id, N1 FROM numbers);  DROP TABLE IF EXISTS t2; CREATE TEMPORARY TABLE t2 (Select row_num+1 as row_num FROM t1 WHERE N1 = 9);  SELECT id, N1 FROM t1 WHERE row_num IN (Select * From t2); 

Bestätigung

* Wählen Sie aus Zahlen ( das RowIDentspricht 5fehlt hier)

Über SQL-Abfrage


Weitere Ressourcen