In Sqlite 3 sto cercando di capire come selezionare le righe in base a un valore minimo. Penso di essere limitato dal non conoscere abbastanza la terminologia correlata per cercare efficacemente su Google.
La tabella si presenta come:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Voglio ottenere le righe in cui num2
è 1, 2
, e 4
. Voglio fare la selezione in base al valore minimo di num per ogni valore univoco della colonna di testo.
Quindi, per text = 'a'
, il valore minimo di num
è 0
, quindi voglio le righe 1 e 2. Per text = 'b'
, il valore minimo di num
è 1
, quindi voglio la riga 4
.
Utilizzando varie combinazioni di gruppo da parte, io sono in grado di ottenere sia le righe 1
e 2
righe o 1
e 4
. Mi sento come se mi mancasse un componente SQL che farebbe quello che voglio, ma non sono stato in grado di capire cosa potrebbe essere.
Qual è il modo corretto di eseguire questo tipo di query?
Possibile soluzione
Ho trovato un modo per farlo. Non sono abbastanza affidabile per rispondere alla mia domanda, quindi sto facendo l'aggiornamento qui. Non sono sicuro che sia sempre corretto o come sia l'efficienza. Tutti i commenti sono benvenuti
Ho usato un'istruzione di selezione composta, in cui una query trova il valore minimo di num per ogni valore univoco di testo:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Quindi ho unito questo con la tabella completa per ottenere tutte le righe corrispondenti a queste due colonne.
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