SQL - Consulta resgistro más reciente por fecha y hora

 
Vista:

Consulta resgistro más reciente por fecha y hora

Publicado por jokings80 (10 intervenciones) el 16/08/2012 17:01:36
Hola,

Tengo una tabla con los campos Cliente, Compra, Fecha y Hora que guarda las compras que un cliente hace y necestiso hacer una consulta donde se recuperen los registros con mayor fecha y hora de cada usuario.

Por ejemplo. Si la situación de la tabla es,

Cliente___Compra___Fecha_________Hora
=====================================
Juan______12B______2012-08-16____16:30:00
María______13A______2012-08-15____20:30:00
Juan______23C______2012-08-16____16:35:00
Julián_____13C______2012-08-14____10:20:00
Juan______22A______2012-08-13____18:40:00
María______23I______2012-08-16____16:30:00
José______34F______2012-08-16____16:30:00

Tendría que devolver,

Cliente___Compra___Fecha_________Hora
=====================================
Juan______23C______2012-08-16____16:35:00
María______23I______2012-08-16____16:30:00
José______34F______2012-08-16____16:30:00
Julián_____13C______2012-08-14____10:20:00

Por ahora consigo que devuelva la compra que ha hecho cada usuario el último día, pero si ese día ha hecho varias, no consigo que devuelva la última. La consulta que tengo es,

SELECT Cliente, Compra, MAX(Fecha), Hora
FROM t_compras
GROUP BY Cliente
ORDER BY Fecha DESC, Hora DESC

Si hago,

SELECT Cliente, Compra, MAX(Fecha), MAX(Hora)
FROM t_compras
GROUP BY Cliente
ORDER BY Fecha DESC, Hora DESC

Se obitne,

Cliente___Compra___Fecha_________Hora
=====================================
Juan______12B______2012-08-16____16:35:00
María______23I______2012-08-16____16:30:00
José______34F______2012-08-16____16:30:00
Julián_____13C______2012-08-14____10:20:00

Fijaos que devuleve la última fecha y hora, pero la compra no es la que corresponde con esa hora, sino con otra de ese día.

¿Hay alguna forma de obtener los registros con la fecha y la hora más recientes?

Mucha 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 resgistro más reciente por fecha y hora

Publicado por leonardo_josue (1173 intervenciones) el 16/08/2012 21:23:57
Hola de nuevo jokings80:

Veo que sigues batallando con el manejo de fechas verdad??? hace algunos días contesté una pregunta tuya acerca de obtener mínimos, y veo que ahora es con máximos. Sin embargo, antes de plantear una solución tendrías que aclararnos algunos puntos...

Primero, Qué base de Datos estás utilizando??? desde mi post pasado te insistía que este dato es primordial que lo menciones, ya que la sintaxis es distinta entere las BD's

Segundo, ¿Por qué razón estás almacenando la hora y la fecha como campos separados? la mayoría, sino es que todos los DBMS manejan un tipo de dato DATETIME para almacenar tanto la fecha como la hora... creo que tenerlos separados es un desperdicio.

Tercero, de qué tipo de datos son tus columnas, es decir no todos las BD manejan el tipo de Datos DATE y TIME, por lo tanto cabe la posibilidad de que estés almacenando los datos como si fueran VARCHAR, lo que sería una completa barbaridad.

A partir de la respuesta de a las últimas dos preguntas igual y te convendría cambiar tu tabla y poder manejar un solo campo, y utilizando una consulta como la que te puse en el post pasado:

http://www.lawebdelprogramador.com/foros/SQL/1344369-Consulta_del_menor_no_repetido_ordenado.html

llegarías al mismo resultado, cambiando MIN por MAX.

en cuanto a las consultas que estás poniendo como ejemplo, nunca te funcionarán, ya que el colocar dos funciones MAX no implica que estén relacionados. lo que tendrías que hacer es juntar tus campos fecha y hora de tal manera que obtengas una fecha completa y entonces sí aplicar una sola función MAX, y con el INNER como en la liga hacer el filtrado.

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 resgistro más reciente por fecha y hora

Publicado por jokings80 (10 intervenciones) el 17/08/2012 09:42:08
Hola!!

Gracias de nuevo por responder :)

Perdón por no comentar en el otro post qué base de datos estaba utilizando. Como funcionó la solución al problema no me di cuenta y se me pasó :( Estoy trabajando con MySQL.

Estoy almacenando la hora y la fecha en campos separados sobre todo por desconocimiento :S Para la maquetación de la página tengo que presentar por un lado la fecha y por otro la hora y me pareció que lo más sencillo y rápido usar un campo para la fecha y otro para la hora que guardarlos juntos y después tener que separarlos. En la base de datos los guardo en un campo DATE y otro TIME. ¿Si uso un campo DATETIME es rápido recuperar uno y otro dato por separado?

Había pensado en usar CONVERT para convertir la fecha y la hora en un sólo campo, pero ya estoy dudando. ¿Qué creéis que es mejor guadar fecha y hora por separado y juntarlos para hacer la consulta o guardar fecha y hora juntos y separarlos para mostrarlos en la página?

Slds!!
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
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 resgistro más reciente por fecha y hora

Publicado por leonardo_josue (1173 intervenciones) el 17/08/2012 16:39:02
Hola de nuevo jokings80:

Tal como te comenté en el post pasado, lo recomendable es guardar tanto la fecha como la hora en un solo campo tipo DATETIME, en lugar de almacenar los datos en campos separados. MySQL proporciona las funciones DATE y TIME para extraer sólo la fecha y sólo la hora, y hay más funciones que te permiten presentar la fecha en el formato que quieras.

1
2
3
4
5
6
7
mysql> select now(), date(now()), time(now());
+---------------------+-------------+-------------+
| now()               | date(now()) | time(now()) |
+---------------------+-------------+-------------+
| 2012-08-17 09:34:57 | 2012-08-17  | 09:34:57    |
+---------------------+-------------+-------------+
1 row in set (0.03 sec)


Si aun tienes posibilidades de cambiar tu modelo de BD entonces hazlo y evítate problemas en el futuro.

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
0
Comentar

Consulta resgistro más reciente por fecha y hora

Publicado por jokings80 (10 intervenciones) el 19/08/2012 19:15:39
Hola!!

Cambiaré los campos DATE y TIME por uno DATETIME.

Muchas gracias por la ayuda!! :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
sin imagen de perfil

Consulta resgistro más reciente por fecha y hora

Publicado por Jose Angel (2 intervenciones) el 18/08/2014 03:20:45
oye leo podrias ayudarme con una consulta? podrias pasarme tu facebook?
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