sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Poster infogade per timme, för de senaste 24 timmarna

Om du grupperade efter HOUR(time) då bör du använda HOUR(time) i dina valda uttryck, och inte time . Till exempel:

SELECT HOUR(time), COUNT(*)
FROM `records`
WHERE time > DATE_SUB(NOW(), INTERVAL 24 HOUR)
GROUP BY HOUR(time)
ORDER BY HOUR(time)

Alternativt kan du gruppera efter det uttryck du vill returnera:

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 )

Om du undrade är det säkert att anropa NOW() flera gånger i samma fråga som denna. Från manualen :




  1. Hur man infogar csv-fildata i mysql-databasen

  2. Loopar svg-rektanglar från databasen

  3. Välj mellan agentbaserad och agentlös övervakning

  4. NameError:namnet '_mysql' är inte definierat efter inställningen ändras till mysql