SQL: Consultar el máximo agrupado por días

Buenas,

tengo una tabla con los campos fecha y valor (varios valores por día). Me gustaría hacer una consulta que me devuelva el máximo valor obtenido cada día. Es decir, un valor por día.

¿cuál sería la sintaxis?

Gracias!
Sin mas datos, pues...

select fecha, max(valor)
from tabla
group by fecha
Hola!

No funciona. Me devuelve registros de la forma:

5 2014-06-17 20:32:28.
4 2014-06-17 13:59:54.
3 2014-06-17 13:56:14.
2 2014-06-17 13:38:05.
1 2014-06-17 09:21:22.

Es decir, varios por el mismo día :(

Gracias.
mmmm.. sino das mas información yo creo que funciona correctamente. Otra cosa es que estés usando un registro datetime en vez de date, como parece ser el caso.

Si usas mysql, para hacer el cast tienes el operador DATE
select fecha, max(valor)
from tabla
group by DATE(fecha)


pd: todo este tipo de dudas se resuelven muy fácilmente y sobretodo rápidamente con google/stackoverflow

pd2: Si sigue sin ir, lo lógico es que indiques base de datos a usar y la tabla y sus tipos de datos...
nu_kru escribió:mmmm.. sino das mas información yo creo que funciona correctamente. Otra cosa es que estés usando un registro datetime en vez de date, como parece ser el caso.


Correcto. De hecho, mi query es de la forma:

SELECT MAX(Valor),  CONVERT(VARCHAR(20),DateTime,110) AS fecha FROM DummyTable GROUP BY CONVERT(VARCHAR(20),DateTime,110) order by fecha desc


He mirado por Google, pero seguiré buscando.

Gracias! [oki]

EDIT: ya lo he sacado. Tenía que eliminar la parte HH:MM:SS de la fecha. Así:

select MAX(Value) as Maximo, Convert(date, DateTime) as Dia from DummyTable group by Convert(date, DateTime) order by Dia desc
group by DAY(fecha) y te lo agrupa por días. MOTH(fecha) por mes. YEAR(fecha) por año. No es necesario hacer conversiones.
Piensa que el group agrupa todo campo que sea identico, en tu caso al ponerle horas minutos y segundos no podia agrupar (a menos que hicieras antes un substring).
6 respuestas