SQL - Consulta del menor no repetido ordenado

 
Vista:

Consulta del menor no repetido ordenado

Publicado por jokings80 (10 intervenciones) el 08/08/2012 15:16:30
Hola,

Tengo una tabla Ingresos que guarda el nombre, el ingreso y la fecha en la que se hace el ingreso de una serie de empleados. Sería algo parecido a esto,

Nombre Ingreso Fecha
======= ======= ==========
María--------110---------2012-08-05
José---------100---------2012-07-11
María--------110---------2012-07-13
Juan---------- 90---------2012-07-13
Juan---------100---------2012-07-10
Juan---------- 85---------2012-08-01

¿Cómo podría hacer una consulta para recuperar sólo el registro con menor fecha de cada usuario y a la vez ordenar éstos por fecha? Es decir, de Juan, sólo habría que recuperar el registro "Juan, 90, 2012-07-10", de María el "María, 110, 2012-07-13" y de José el "José, 100, 2012-07-11" y ordenarlos por fecha. La idea es obtener algo parecido a,

Nombre Ingreso Fecha
======= ======= ==========
Juan---------100---------2012-07-10
José---------100---------2012-07-11
María--------110---------2012-07-13

He probado mil formas y no consigo el resultado que necesito :(

Gracias por la ayuda!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta del menor no repetido ordenado

Publicado por leonardo_josue (1173 intervenciones) el 08/08/2012 16:22:41
Hola jokings80:

Me sorprende que digas que has probado mil formas sin dar con la consulta, sobre todo cuando este tipo de consultas es básica, y una de las más comunes. En ese mismo foro se ha planteado infinidad de veces... Tienes muchas maneras de hacer esta consulta, una de las más sencillas y más utilizadas es con una subconsulta y un JOIN, sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mysql> SELECT * FROM tabla;
+--------+---------+------------+
| Nombre | Ingreso | Fecha      |
+--------+---------+------------+
| Maria  |     110 | 2012-08-05 |
| Jose   |     100 | 2012-07-11 |
| Maria  |     110 | 2012-07-13 |
| Juan   |      90 | 2012-07-13 |
| Juan   |     100 | 2012-07-10 |
| Juan   |      85 | 2012-08-01 |
+--------+---------+------------+
6 rows in set (0.00 sec)
 
mysql> SELECT T1.* FROM tabla T1
    -> INNER JOIN
    -> ( SELECT nombre, MIN(fecha) min_fecha
    ->   FROM tabla GROUP BY nombre) T2
    ->   ON T1.nombre = T2.nombre AND T1.fecha = T2.min_fecha
    -> ORDER BY T1.fecha;
+--------+---------+------------+
| Nombre | Ingreso | Fecha      |
+--------+---------+------------+
| Juan   |     100 | 2012-07-10 |
| Jose   |     100 | 2012-07-11 |
| Maria  |     110 | 2012-07-13 |
+--------+---------+------------+
3 rows in set (0.03 sec)


Observa que la subconsulta (marcada como T2) selecciona la fecha mínima para cada nombre, de tal manera que puedes utilizar esta subconsulta para filtrar la información total.

El ejemplo lo estoy haciendo con MySQL, aunque no nos dices con que BD estás trabajando, pero de cualquier manera sólo utiliza SQL Estándar, por lo que debería funcionar para la mayoría de las BD's.

Dale un vistazo, estoy seguro que te puede servir.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Consulta del menor no repetido ordenado

Publicado por jokings80 (10 intervenciones) el 13/08/2012 08:36:48
Hola,

Muchas gracias por responder. Eso era. Funcionó perfectamente. Estaba empeñado en usar cosas como DISTINCT y hacer la consulta sin un INNER JOIN :S

Muchas gracias!! :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta del menor no repetido ordenado

Publicado por Aaron Elvir (1 intervención) el 15/10/2014 22:08:55
Leonardo, sos un exito hermano, nunca paso por mi cabeza hacer algo asi, estaba necesitando una consulta exactamente con esas caracteristicas, traer la ultima fecha que un cliente me hubiera realizado una compra, se puede usar MAX o MIN dependiendo de lo que necesitemos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta del menor no repetido ordenado

Publicado por eliot (1 intervención) el 08/02/2016 20:23:16
Muy buenas leonardo_josue,espero que a pesar de la fecha del post , te encuentres por haca todavia y me puedes contestar.

Lo que pido de favor es que expliques mas detallado tu select brother, :) muchas gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar