Tu puedes usa GROUP BY
, pero es importante entender cómo funciona.
Cuando usas GROUP BY
un grupo de filas se contrae en una y lo que se muestra en las otras columnas que no se usan en su GROUP BY
cláusula, se determina mediante el uso de funciones agregadas o es una fila aleatoria fuera de ese grupo. No puede estar seguro de obtener la fila correspondiente a la fila que se muestra sosteniendo el MAX()
valor o cualquier función agregada que haya utilizado. Esto se vuelve especialmente obvio cuando haces una consulta como:
SELECT id, MIN(whatever), MAX(whatever), another_column
FROM your_table
GROUP BY id
La "otra_columna" puede pertenecer a la fila que contiene el valor MIN() o el valor MAX() o incluso a otra fila que no se muestra en absoluto. En otros RDBMS que no sean MySQL, en realidad está prohibido seleccionar columnas que no usen una función agregada o que no estén en la lista de GROUP BY
cláusula, solo para evitar que los usuarios cometan un error o piensen que obtuvieron el resultado correcto.
Entonces, en su caso, parece que también desea mostrar la columna "valor". Por las razones anteriores, la respuesta de juergen_d es incorrecta, porque no selecciona "valor", y si lo hiciera, no puede estar seguro de que sea el "valor" correcto. La respuesta de Filipe Silva es incorrecta, porque agrupa por "valor". Hacer esto en su caso devolverá la tabla completa. La respuesta de Romesh es incorrecta, porque usar dos veces el MAX()
la función obtendrá los valores máximos, obviamente, pero no el valor correspondiente al valor de fecha y hora.
Entonces, ¿cómo tienes que hacerlo? Aquí se describen 3 formas . Apréndelos aplicándolos tú mismo. No es tan difícil :)