En Sqlite 3, estoy tratando de descubrir cómo seleccionar filas en función de un valor mínimo. Creo que estoy limitado por no saber lo suficiente de la terminología relacionada para buscar en Google de manera efectiva.
La mesa se ve así:
num text num2
---------- ---------- ----------
0 a 1
0 a 2
1 a 3
1 b 4
Quiero obtener las filas donde num2
está 1, 2
, y 4
. Quiero hacer la selección basada en el valor mínimo de num para cada valor único de la columna de texto.
Entonces, para text = 'a'
, el valor mínimo de num
es 0
, entonces quiero las filas 1 y 2. Para text = 'b'
, el valor mínimo de num
es 1
, entonces quiero la fila 4
.
Usando varias combinaciones de group by, puedo obtener filas 1
y / 2
o filas 1
y 4
. Siento que me falta un componente SQL que haga lo que quiero, pero no he podido averiguar qué podría ser.
¿Cuál es la forma correcta de hacer este tipo de consulta?
Solución posible
He encontrado una manera de hacer esto. No tengo la reputación suficiente para responder mi propia pregunta, así que estoy haciendo la actualización aquí. No estoy seguro si siempre es correcto o cómo es la eficiencia. Cualquier comentario es bienvenido.
Usé una declaración de selección compuesta, donde una consulta encuentra el valor mínimo de num para cada valor único de texto:
sqlite> select num, text from t group by text having num = min( num );
num text
---------- ----------
0 a
1 b
Luego me uní a esto con la tabla completa para obtener todas las filas que coinciden con estas dos columnas.
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