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

MAX y GROUP BY

Estas en el tema de MAX y GROUP BY en el foro de Mysql en Foros del Web. Tengo la siguiente tabla: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original mysql > SELECT * FROM ss_seg ; +----+---------+-------+---------------------+ | id | idtarea | value | ...
  #1 (permalink)  
Antiguo 06/12/2010, 15:08
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
MAX y GROUP BY

Tengo la siguiente tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM ss_seg;
  2. +----+---------+-------+---------------------+
  3. | id | idtarea | value | fecha               |
  4. +----+---------+-------+---------------------+
  5. | 15 |      55 |    20 | 2010-12-06 00:00:00 |
  6. | 16 |      56 |    54 | 2010-12-06 00:00:00 |
  7. | 17 |      59 |    90 | 2010-12-06 00:00:00 |
  8. | 18 |      60 |    80 | 2010-12-06 00:00:00 |
  9. | 19 |      61 |    70 | 2010-08-04 00:00:00 |
  10. | 20 |      61 |    70 | 2010-12-06 00:00:00 |
  11. | 21 |      62 |    15 | 2010-12-06 00:00:00 |
  12. | 22 |      63 |    67 | 2010-12-06 00:00:00 |
  13. | 23 |      64 |     8 | 2010-12-06 00:00:00 |
  14. | 24 |      65 |    80 | 2010-12-06 00:00:00 |
  15. | 25 |      71 |    50 | 2010-12-06 00:00:00 |
  16. | 26 |      72 |    80 | 2010-12-06 00:00:00 |
  17. | 27 |      70 |    30 | 2010-12-06 00:00:00 |
  18. | 28 |      57 |    50 | 2010-12-06 00:00:00 |
  19. | 29 |      58 |     0 | 2010-12-06 15:50:45 |
  20. | 30 |      58 |    50 | 2010-12-06 18:50:01 |
  21. | 14 |      55 |    10 | 2010-09-14 00:00:00 |
  22. +----+---------+-------+---------------------+
  23. 17 rows in set
Requiero mostrar los ultimos valores ordenados por fechas, asi que agrupo por 'idtarea', así;
Código MySQL:
Ver original
  1. mysql> SELECT id,idtarea,value,MAX(fecha) FROM ss_seg GROUP BY idtarea;
  2. +----+---------+-------+---------------------+
  3. | id | idtarea | value | MAX(fecha)          |
  4. +----+---------+-------+---------------------+
  5. | 15 |      55 |    20 | 2010-12-06 00:00:00 |
  6. | 16 |      56 |    54 | 2010-12-06 00:00:00 |
  7. | 28 |      57 |    50 | 2010-12-06 00:00:00 |
  8. | 29 |      58 |     0 | 2010-12-06 18:50:01 |  /* eL valor debería ser 50 */
  9. | 17 |      59 |    90 | 2010-12-06 00:00:00 |
  10. | 18 |      60 |    80 | 2010-12-06 00:00:00 |
  11. | 19 |      61 |    70 | 2010-12-06 00:00:00 |
  12. | 21 |      62 |    15 | 2010-12-06 00:00:00 |
  13. | 22 |      63 |    67 | 2010-12-06 00:00:00 |
  14. | 23 |      64 |     8 | 2010-12-06 00:00:00 |
  15. | 24 |      65 |    80 | 2010-12-06 00:00:00 |
  16. | 27 |      70 |    30 | 2010-12-06 00:00:00 |
  17. | 25 |      71 |    50 | 2010-12-06 00:00:00 |
  18. | 26 |      72 |    80 | 2010-12-06 00:00:00 |
  19. +----+---------+-------+---------------------+
  20. 14 rows in set
Si ven detenidamente la fecha está bien, pero el 'id' debería ser 30 y el valor debería ser 50, debo realizar una subconsulta para lograr mi propósito?, agradecería algúna idea
  #2 (permalink)  
Antiguo 06/12/2010, 15:54
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: MAX y GROUP BY

Saludos

mmm prueba de esta manera
Código MySQL:
Ver original
  1. SELECT id,idtarea,value,fecha FROM ss_seg GROUP BY idtarea ORDER BY fecha DESC;
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 06/12/2010, 16:33
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, 5 meses
Puntos: 2658
Respuesta: MAX y GROUP BY

No funcionará. El ORDER BY debe ir siempre después del GROUP BY, eso está bien, pero el ORDER BY ordenará lo que ya está agrupado, y a su vez el GROUP BY operará en el orden de aparición, por lo que el horario de las 18:50:01 quedará escondido detrás del anterior, porque este aparece primero.
La solución es usar subconsultas. No hay otro modo (todos los demás son más complicados), haciendo que primero ordene del más reciente al más antiguo, y recién allí agrupe.
Tomando lo que postea Nano_, sería:
Código MySQL:
Ver original
  1. SELECT id, idtarea, value, fecha
  2.     (SELECT id, idtarea, value, fecha
  3.     FROM ss_seg
  4.     ORDER BY fecha DESC, idtarea ASC) T
  5. GROUP BY idtarea ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 07/12/2010, 06:57
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: MAX y GROUP BY

JOJOJO.

si el problema esta solucionado, entiendo que en algunos casos las subconsultas son tan importantes.

Gracias gnzsoloyo
  #5 (permalink)  
Antiguo 07/12/2010, 08:24
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: MAX y GROUP BY

Gracias gnzsoloyo, también me ha servido para entenderlo
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Etiquetas: group, max
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 08:03.