Dans Sqlite 3, j'essaie de comprendre comment sélectionner des lignes en fonction d'une valeur minimale. Je pense que je suis limité en ne connaissant pas suffisamment la terminologie associée pour rechercher efficacement sur Google.
Le tableau ressemble à:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Je veux obtenir les lignes où num2
est 1, 2
, et 4
. Je veux faire la sélection en fonction de la valeur minimale de num pour chaque valeur unique de la colonne de texte.
Donc, pour text = 'a'
, la valeur minimale de num
est 0
, donc je veux les lignes 1 et 2. Pour text = 'b'
, la valeur minimale de num
est 1
, donc je veux la ligne 4
.
En utilisant diverses combinaisons de group by, je peux obtenir des lignes 1
et 2
ou des lignes 1
et 4
. J'ai l'impression qu'il me manque un composant SQL qui ferait ce que je veux, mais je n'ai pas réussi à comprendre ce que cela pourrait être.
Quelle est la bonne façon de faire ce type de requête?
Solution possible
J'ai trouvé un moyen de le faire. Je ne suis pas assez réputé pour répondre à ma propre question, alors je fais la mise à jour ici. Je ne sais pas si c'est toujours correct ou à quoi ressemble l'efficacité. Tout commentaire est le bienvenu.
J'ai utilisé une instruction de sélection composée, où une requête trouve la valeur minimale de num pour chaque valeur unique de texte:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Ensuite, je l'ai joint à la table complète pour obtenir toutes les lignes correspondant à ces deux colonnes.
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