Tres funciones de mysql y tres resultados distintos.
Sea la siguiente tabla simplificada en MySQL ·client_states.
state_id | end_date 8;2000-01-01 00:00:00 9;2012-05-15 00:00:00
Quería obtener el último estado del usuario (la fecha más alta de las registradas del usuario) y ésto es lo que me he encontrado trasteando con la función MAX()
select state_id from states_clients where client_id=99996 having max(end_date);
Resultado Fail
8;2000-01-01 00:00:00
select max(state_id), max(end_date) from states_clientes where client_id=99996;
Resultado Win
9;2012-05-15 00:00:00
select state_id, max(end_date) from states_clients where client_id=99996;
Resultado Fail
8;2012-05-15 00:00:00
¿Por qué?
Conclusiones + stackoverfow:
- Having siempre va con group by. Es por ello por lo que lo devuelve el resultado esperado. Documentación SELECT de MySQL.
- OJICO. Aunque estés seleccionado el valor máximo de una columna, no devuelven los valores en concordancia con las filas. Como se ve en el último ejemplo está devolviendo ‘8;2012-05-15 00:00:00 ‘en vez de devolver ‘8;2000-01-01 00:00:00’.
Pingback: “”: Lacarrismos del 16 al 20 de Septiembre | Software y otras desvirtudes
creo que debiste usar
select state_id, end_date
from states_clients
where client_id=99996;
order by end_date desc limit 1
Si? Por qué? Muchas gracias