Como usar GROUP y ORDER BY correctamente?

Iniciado por BEATMASTER, 28 Noviembre 2012, 04:10 AM

0 Miembros y 1 Visitante están viendo este tema.

BEATMASTER

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


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

Shell Root

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 (sql) [Seleccionar]
.... 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 (sql) [Seleccionar]
SELECT uni,la,lo FROM sys_gps GROUP BY uni ORDER BY fr, hr DESC
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

BEATMASTER

#2
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?

Shell Root

Bueno, muestrame 5 registros y el resultado que esperas
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

BEATMASTER

teniendo estos datos

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

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"