Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: BEATMASTER en 28 Noviembre 2012, 04:10



Título: Como usar GROUP y ORDER BY correctamente?
Publicado por: BEATMASTER en 28 Noviembre 2012, 04:10
Hola hace tiempo que uso mysql pero a nivel muy basico creo yo y desde hace tiempo me sale una duda al querer hacer una seleccion de datos que en teoria deberia ser muy simple pero que nunca me ha regresado el valor deseado, primero pongo mi query

Código:
SELECT uni,la,lo FROM sys_gps GROUP BY uni ORDER BY fr DESC, hr DESC

mi tabla solo contiene esos campos ademas de uno llamado id que es la llave y fr y hr que son respectivamente un DATE y un TIME para la fecha y hora de registro

el campo uni es un entero el campo la y lo son varchar

el campo uni es un numero del 1 al N ahorita solo manejo hasta el 3

de lo que se trata es que para cada numero "uni" obtenga los datos mas recientes de "la" y "lo" por eso es que trato primero de agrupar por "uni" lo cual funciona porque me trae solo 3 registros del 1 al 3 pero no me trae el valor mas reciente ya que me trae el primer valor de cada uno y quisiera que me trajera el valor mas reciente de cada "uni"

creo que debe ser algo facil pero no eh encontrado algo con que sustituir mis condiciones para obtener el valor mas reciente, normalmente lo que hago es obtengo un grupo de valores cercnos por ejemplo lo limito a hace 5 mins y por php filtro la "uni" por codigo... pero bueno creo que seria mejor por mysql directamente alguien me sabe decir que debo cambiar? muchas gracias


Título: Re: Como usar GROUP y ORDER BY correctamente?
Publicado por: Shell Root en 28 Noviembre 2012, 04:31
1. Para que usar un campo para la fecha y la hora, si puedes usar DATETIME() que los tiene juntos.
2. Para ordenar supongo que será,
Código
  1. .... ORDER BY fr, hr DESC


Prueba la query siguiente y mira a ver que resultado te da, y mira de que se trata el tipo de datos que te dije
Código
  1. SELECT uni,la,lo FROM sys_gps GROUP BY uni ORDER BY fr, hr DESC


Título: Re: Como usar GROUP y ORDER BY correctamente?
Publicado por: BEATMASTER en 28 Noviembre 2012, 04:38
mm sigue mostrandome el primer registro en ves de el ultimo, lo de tener la fecha y hora separadas es por cuestiones de la captura en ocasiones podran capturar solo la fecha o solo la hora no siempre sera automatico :p

EDIT:
Un amigo me dice que el problema es que al hacer el GROUP ya limita mis registros a estrictamente los primeros registros que encontro con el filtro del GROUP entonces pierde sentido hacer el ORDER porque ya lo hara solo con mis 3 registros y no con toda la tabla, segune sto el dice que es forsozo hacer 2 querys uno para obtener todos los registros mas recientes y luego filtrarlo por mi campo "uni" :S pero creo que deberia haber una forma de ahcerlo en una sola consulta no?


Título: Re: Como usar GROUP y ORDER BY correctamente?
Publicado por: Shell Root en 28 Noviembre 2012, 04:44
Bueno, muestrame 5 registros y el resultado que esperas


Título: Re: Como usar GROUP y ORDER BY correctamente?
Publicado por: BEATMASTER en 28 Noviembre 2012, 04:52
teniendo estos datos
Código:
id,uni,la,lo,fr,hr
1,1,37.785835,-122.406418,2012-10-17,23:58:05
2,2,40.785835,-99.406418,2012-10-18,10:58:05
3,3,25.785835,-120.406418,2012-10-18,14:58:05
4,1,23.785835,-88.406418,2012-11-27,23:58:05
5,2,23.785835,-111.406418,2012-10-27,22:58:05
6,3,54.785835,-34.406418,2012-10-27,18:58:05

yo esperaria obtener este resultado
Código:
uni,la,lo
1,23.785835,-88.406418
2,23.785835,-111.406418
3,54.785835,-34.406418

ya que por cada valor de "uni" son los valores mas actuales de "la" y "lo"