Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Obtener fila con fecha más reciente usando dos GROUP BY

Estas en el tema de Obtener fila con fecha más reciente usando dos GROUP BY en el foro de Mysql en Foros del Web. Hola estimados!!! Me vi en la necesidad de pedir su ayuda por que ya he buscado por más de tres horas e intentado muchas maneras ...
  #1 (permalink)  
Antiguo 08/07/2015, 10:25
 
Fecha de Ingreso: enero-2010
Mensajes: 22
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Obtener fila con fecha más reciente usando dos GROUP BY

Hola estimados!!!

Me vi en la necesidad de pedir su ayuda por que ya he buscado por más de tres horas e intentado muchas maneras pero no me resulta lo que necesito.

Les explico brevemente.

Tengo la siguiente tabla

Código:
id | codigo | proyecto | cantidad | fecha
------------------------------------------------------------
1 | AAA123 | Proyecto 1 | 50 | 2015-07-06 09:05:00
2 | AAA123 | Proyecto 1 | 20 | 2015-07-06 09:10:00
3 | BBB456 | Proyecto 2 | 45 | 2015-07-06 09:15:00
4 | BBB456 | Proyecto 2 | 30 | 2015-07-06 09:20:00
5 | AAA123 | Proyecto 3 | 11 | 2015-07-06 09:25:00
6 | DDD000 | Proyecto 1 | 18 | 2015-07-06 09:30:00
7 | BBB456 | Proyecto 4 | 54 | 2015-07-06 09:20:00
La idea es que me agrupe los datos por Codigo y Proyecto (GROUP BY codigo, proyecto). Pero en cada agrupación me muestra la fila que tenga la fecha máxima o reciente.

Debería quedar así:

Código:
id | codigo | proyecto | cantidad | fecha
------------------------------------------------------------
2 | AAA123 | Proyecto 1 | 20 | 2015-07-06 09:10:00
4 | BBB456 | Proyecto 2 | 30 | 2015-07-06 09:20:00
5 | AAA123 | Proyecto 3 | 11 | 2015-07-06 09:25:00
6 | DDD000 | Proyecto 1 | 18 | 2015-07-06 09:30:00
7 | BBB456 | Proyecto 4 | 54 | 2015-07-06 09:20:00
Lo único que he conseguido es que me muestre la fecha máxima de cada agrupación con MAX(fecha), pero lo que me interesa es la 'cantidad'.

He probado con INNER JOIN (SELECT... , FROM (SELECT... , HAVING.... pero no hay caso.. me la ganó en este caso.

Desde ya muchas gracias a todos!!!

Última edición por dariones123; 08/07/2015 a las 10:39
  #2 (permalink)  
Antiguo 08/07/2015, 10:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Obtener fila con fecha más reciente usando dos GROUP BY

Hemos respondido tantas veces este tipo de pregunta que ya da un poco de grima hacerlo otra vez, pero allá va:
Código MySQL:
Ver original
  1. SELECT id, codigo, proyecto,  cantidad,  fecha
  2.   (SELECT id, codigo, proyecto,  cantidad,  fecha
  3.   FROM proyecto
  4.   ORDER BY fecha DESC)
  5. GROUP BY codigo ASC;

´Cuidado: Es una solución exclusiva para MySQL
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/07/2015, 10:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Obtener fila con fecha más reciente usando dos GROUP BY

Hola dariones123:

Este tipo de consultas es básica en SQL, ya que es una de las más comunes y utilizadas. Me extraña que no hayas encontrado ayuda antes, pero bueno, vayamos a la ayuda... hay muchas formas de resolver la consulta... una de las más usadas, y desde mi punto de vista una de las mejores es con subconsultas y JOIN's... checa este ejemplo:

Primero tenemos la tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+------------+----------+---------------------+
  3. | id   | codigo | proyecto   | cantidad | fecha               |
  4. +------+--------+------------+----------+---------------------+
  5. |    1 | AAA123 | Proyecto 1 |       50 | 2015-07-06 09:05:00 |
  6. |    2 | AAA123 | Proyecto 1 |       20 | 2015-07-06 09:10:00 |
  7. |    3 | BBB456 | Proyecto 2 |       45 | 2015-07-06 09:15:00 |
  8. |    4 | BBB456 | Proyecto 2 |       30 | 2015-07-06 09:20:00 |
  9. |    5 | AAA123 | Proyecto 3 |       11 | 2015-07-06 09:25:00 |
  10. |    6 | DDD000 | Proyecto 1 |        8 | 2015-07-06 09:30:00 |
  11. |    7 | BBB456 | Proyecto 4 |       54 | 2015-07-06 09:20:00 |
  12. +------+--------+------------+----------+---------------------+
  13. 7 rows in set (0.00 sec)

Ahora, de acuerdo a lo que comentas, te interesa la MAX fecha, agrupando por codigo y proyecto... en esto no debes tener mucho problema, ya que simplemente haces algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT codigo, proyecto, MAX(fecha) max_fecha
  2.     -> FROM tabla
  3.     -> GROUP BY codigo, proyecto;
  4. +--------+------------+---------------------+
  5. | codigo | proyecto   | max_fecha          |
  6. +--------+------------+---------------------+
  7. | AAA123 | Proyecto 1 | 2015-07-06 09:10:00 |
  8. | AAA123 | Proyecto 3 | 2015-07-06 09:25:00 |
  9. | BBB456 | Proyecto 2 | 2015-07-06 09:20:00 |
  10. | BBB456 | Proyecto 4 | 2015-07-06 09:20:00 |
  11. | DDD000 | Proyecto 1 | 2015-07-06 09:30:00 |
  12. +--------+------------+---------------------+
  13. 5 rows in set (0.00 sec)

Ahora bien, dado que te interesan datos adicionales (cantidad y id) lo que haces es meter esto como una subconsulta, y utilizar un INNER JOIN para filtrar la información...

esto sería más o menos asi:

Código MySQL:
Ver original
  1. SELECT T1.* FROM tabla T1
  2. (Aquí pones la subconsulta) T2
  3. ON (aquí pones todas las condiciones)

Observa que los registros de tu tabla original DEBEN CUMPLIR CON CONDICIONES DE IGUALDAD EN TODOS LOS CAMPOS, incluyendo la FECHA... es decir, en el ON debes tener 3 condiciones de igualdad...

Haz la prueba y nos comentas, si tienes problemas postea lo que intentaste hacer y con gusto te ayudamos a corregir lo que tengas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 08/07/2015, 10:50
 
Fecha de Ingreso: enero-2010
Mensajes: 22
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Obtener fila con fecha más reciente usando dos GROUP BY

Bueno, ahora que aprendí como se hace, no se me va a olvidar nunca.. muchas gracias! Gracias por tu tiempo!!!

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Hemos respondido tantas veces este tipo de pregunta que ya da un poco de grima hacerlo otra vez, pero allá va:
Código MySQL:
Ver original
  1. SELECT id, codigo, proyecto,  cantidad,  fecha
  2.   (SELECT id, codigo, proyecto,  cantidad,  fecha
  3.   FROM proyecto
  4.   ORDER BY fecha DESC)
  5. GROUP BY codigo ASC;

´Cuidado: Es una solución exclusiva para MySQL
  #5 (permalink)  
Antiguo 08/07/2015, 10:54
 
Fecha de Ingreso: enero-2010
Mensajes: 22
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Obtener fila con fecha más reciente usando dos GROUP BY

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola dariones123:

Este tipo de consultas es básica en SQL, ya que es una de las más comunes y utilizadas. Me extraña que no hayas encontrado ayuda antes, pero bueno, vayamos a la ayuda... hay muchas formas de resolver la consulta... una de las más usadas, y desde mi punto de vista una de las mejores es con subconsultas y JOIN's... checa este ejemplo:

Primero tenemos la tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+--------+------------+----------+---------------------+
  3. | id   | codigo | proyecto   | cantidad | fecha               |
  4. +------+--------+------------+----------+---------------------+
  5. |    1 | AAA123 | Proyecto 1 |       50 | 2015-07-06 09:05:00 |
  6. |    2 | AAA123 | Proyecto 1 |       20 | 2015-07-06 09:10:00 |
  7. |    3 | BBB456 | Proyecto 2 |       45 | 2015-07-06 09:15:00 |
  8. |    4 | BBB456 | Proyecto 2 |       30 | 2015-07-06 09:20:00 |
  9. |    5 | AAA123 | Proyecto 3 |       11 | 2015-07-06 09:25:00 |
  10. |    6 | DDD000 | Proyecto 1 |        8 | 2015-07-06 09:30:00 |
  11. |    7 | BBB456 | Proyecto 4 |       54 | 2015-07-06 09:20:00 |
  12. +------+--------+------------+----------+---------------------+
  13. 7 rows in set (0.00 sec)

Ahora, de acuerdo a lo que comentas, te interesa la MAX fecha, agrupando por codigo y proyecto... en esto no debes tener mucho problema, ya que simplemente haces algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT codigo, proyecto, MAX(fecha) max_fecha
  2.     -> FROM tabla
  3.     -> GROUP BY codigo, proyecto;
  4. +--------+------------+---------------------+
  5. | codigo | proyecto   | max_fecha          |
  6. +--------+------------+---------------------+
  7. | AAA123 | Proyecto 1 | 2015-07-06 09:10:00 |
  8. | AAA123 | Proyecto 3 | 2015-07-06 09:25:00 |
  9. | BBB456 | Proyecto 2 | 2015-07-06 09:20:00 |
  10. | BBB456 | Proyecto 4 | 2015-07-06 09:20:00 |
  11. | DDD000 | Proyecto 1 | 2015-07-06 09:30:00 |
  12. +--------+------------+---------------------+
  13. 5 rows in set (0.00 sec)

Ahora bien, dado que te interesan datos adicionales (cantidad y id) lo que haces es meter esto como una subconsulta, y utilizar un INNER JOIN para filtrar la información...

esto sería más o menos asi:

Código MySQL:
Ver original
  1. SELECT T1.* FROM tabla T1
  2. (Aquí pones la subconsulta) T2
  3. ON (aquí pones todas las condiciones)

Observa que los registros de tu tabla original DEBEN CUMPLIR CON CONDICIONES DE IGUALDAD EN TODOS LOS CAMPOS, incluyendo la FECHA... es decir, en el ON debes tener 3 condiciones de igualdad...

Haz la prueba y nos comentas, si tienes problemas postea lo que intentaste hacer y con gusto te ayudamos a corregir lo que tengas.

Saludos
Leo.
Gracias por tu tiempo al responderme! Me queda más claro aún.. lo investigaré... saludos!

Etiquetas: agrupar, fecha, group, maximo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:15.