Mysql
 sql >> Base de données >  >> RDS >> Mysql

Intervalle GROUP BY chevauchant l'horodatage Requête MySQL

Je pense que vous voulez juste régler les heures sur 5, pour être cohérent avec votre gamme. Si oui, vous pouvez le faire :

SELECT cast(date(stamp) as datetime) + interval 5 hour
       Sum(value) 
FROM   table 
WHERE  stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
       AND stamp < '2013-01-01 05:00:00' 
GROUP  BY Date(stamp) 

Mais, je pense que vous pourriez en fait vouloir formuler cela un peu différemment :

SELECT cast(date(stamp - interval 5 hour) as datetime) + interval 5 hour
       Sum(value) 
FROM   table 
WHERE  stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
       AND stamp < '2013-01-01 05:00:00' 
GROUP  BY Date(stamp - interval 5 hour)

Cela réaligne en fait les dates sur la limite de 5 heures.

Remarque :ces requêtes n'ont pas été testées et peuvent donc contenir des erreurs de syntaxe.

Cela suppose que l'horodatage est vraiment une date/heure. S'il s'agit d'un horodatage UNIX, vous devez d'abord le convertir.