Je veux compter le nombre d'événements qui se produisent un jour donné du mois, c'est-à-dire du 1er au 31e. pas spécifique au mois. Pour que je puisse voir à quelle heure du mois se produisent le plus d'événements.

Je peux obtenir le nombre total d'événements à une date spécifique et une durée de quelques mois avec cette requête

SELECT COUNT(*), DATE(created_at) 
  FROM loan 
 WHERE DATE(created_at) >= DATE('2020-08-01') 
   AND DATE(created_at) <= DATE('2020-12-31') 
 GROUP BY DATE(created_at);

Par exemple, 10 événements se produisent le 7e jour du mois, 50 événements se produisent le 29. Je vois donc qu'il y a plus d'activité à la fin du mois.

0
bruzza42 16 sept. 2020 à 15:43

2 réponses

Meilleure réponse

Utilisez DAY() au lieu de DATE():

SELECT DAY(created_at), COUNT(*)
FROM loan
WHERE created_at >= '2020-08-01' AND
      created_at < '2021-01-01'
GROUP BY DAY(created_at);

Notez que vous n'avez pas besoin de toutes les fonctions DATE() dans la clause WHERE. Cela peut ralentir les performances si les index peuvent être utilisés pour les conditions WHERE.

1
Gordon Linoff 16 sept. 2020 à 12:44

Envisagez d'agréger par DAY() plutôt que par DATE():

SELECT COUNT(*), DAY(created_at) 
FROM loan 
WHERE created_at >= '2020-08-01' AND created_at < '2021-01-01'
GROUP BY DAY(created_at);

Notez que j'ai changé la clause where afin qu'aucune fonction ne soit appliquée sur la colonne filtrée; c'est plus efficace, surtout si vous avez un index sur created_at.

0
GMB 16 sept. 2020 à 12:45