In SQLite 3 versuche ich herauszufinden, wie Zeilen basierend auf einem Mindestwert ausgewählt werden. Ich denke, dass ich eingeschränkt bin, weil ich nicht genug über die verwandte Terminologie weiß, um Google effektiv zu durchsuchen.
Der Tisch sieht aus wie:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Ich möchte die Zeilen bekommen, wo num2
ist 1, 2
, und 4
. Ich möchte die Auswahl basierend auf dem Mindestwert von num für jeden eindeutigen Wert der Textspalte vornehmen.
Also, für text = 'a'
, der Mindestwert von num
ist 0
, also möchte ich die Zeilen 1 und 2. Für text = 'b'
, der Mindestwert von num
ist 1
, also möchte ich Zeile 4
.
Mit verschiedenen Kombinationen von Gruppieren nach kann ich entweder Zeilen 1
und / 2
oder Zeilen 1
und erhalten 4
. Ich habe das Gefühl, dass mir eine SQL-Komponente fehlt, die das tut, was ich will, aber ich konnte nicht herausfinden, was es sein könnte.
Was ist der richtige Weg, um diese Art von Abfrage durchzuführen?
Mögliche Lösung
Ich habe einen Weg gefunden, dies zu tun. Ich bin nicht seriös genug, um meine eigene Frage zu beantworten, daher mache ich das Update hier. Ich bin mir nicht sicher, ob es immer richtig ist oder wie die Effizienz ist. Kommentare sind willkommen.
Ich habe eine zusammengesetzte select-Anweisung verwendet, bei der eine Abfrage den Mindestwert von num für jeden eindeutigen Textwert ermittelt:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Dann habe ich dies mit der vollständigen Tabelle verbunden, um alle Zeilen zu erhalten, die diesen beiden Spalten entsprechen.
sqlite> with u as
( select num, text from t group by text having num = min( num ) )
select t.* from t join u on t.num = u.num and t.text = u.text;
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 b 4