Se você agrupou por
HOUR(time)
então você deve usar HOUR(time)
em suas expressões selecionadas, e não em time
. Por exemplo:SELECT HOUR(time), COUNT(*)
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY HOUR(time)
Alternativamente, você pode agrupar pela expressão que deseja retornar:
SELECT COUNT(*), FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
ORDER BY FLOOR( TIME_TO_SEC( TIMEDIFF( NOW(), time)) / 3600 )
Caso você esteja se perguntando, é seguro chamar
NOW()
várias vezes na mesma consulta como esta. Do manual
: