198 votes

MySQL / SQL: regrouper par date uniquement sur une colonne datetime

Avoir une table avec une colonne comme: mydate DATETIME ...

J'ai une requête telle que:

 SELECT SUM(foo), mydate FROM a_table GROUP BY a_table.mydate;
 

Cela se regroupera par datetime , y compris les heures et les minutes. Je souhaite faire le groupe par, seulement par la date YYYY/MM/DD pas par le YYYY/MM/DD/HH/mm .

Quelqu'un sait-il comment faire ça? Je peux toujours le faire (comme je suis atm), dynamiquement dans mon code, mais je nettoie le code de la corbeille et cela peut être fait par le biais de SQL Je ne peux pas savoir comment :(.

317voto

Michael Haren Points 42641

Jetez le datetime à une date, puis regroupez-moi cela:

 SELECT SUM(foo), DATE(mydate) FROM a_table GROUP BY DATE(a_table.mydate);
 

Ou vous pouvez regrouper par alias comme @ orlandu63 suggéré:

 SELECT SUM(foo), DATE(mydate) DateOnly FROM a_table GROUP BY DateOnly;
 

Bien que je ne pense pas que cela fera une différence pour la performance, c'est un peu plus clair.

25voto

Richard Merchant Points 169

J'ai trouvé que je devais regrouper au mois et à l'année, donc aucun des deux ne fonctionnait pour moi. Au lieu de cela j'ai utilisé date_format

 SELECT date
FROM blog 
ORDER BY YEAR(date) DESC, MONTH(date) DESC 
GROUP BY DATE_FORMAT(date, "%m-%y")
 

19voto

moo Points 3280

Ou:

 SELECT SUM(foo), DATE(mydate) mydate FROM a_table GROUP BY mydate;
 

Plus efficace (je pense.) Parce que vous n'avez pas à lancer mydate deux fois par ligne.

9voto

RaK Chowdary Points 51
 SELECT SUM(No), HOUR(dateofissue) 
FROM tablename 
WHERE dateofissue>='2011-07-30' 
GROUP BY HOUR(dateofissue)
 

Il donnera l'heure par somme d'un jour particulier!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X