Jeśli pogrupowałeś według HOUR(time)
wtedy powinieneś użyć HOUR(time)
w wybranych wyrażeniach, a nie time
. Na przykład:
SELECT HOUR(time), COUNT(*)
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY HOUR(time)
Alternatywnie możesz pogrupować według wyrażenia, które chcesz zwrócić:
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 )
Jeśli się zastanawiasz, możesz bezpiecznie wywołać NOW()
wiele razy w tym samym zapytaniu, tak jak to. Z podręcznika
: