2010-09-21 8 views
6

J'ai une table où chaque ligne a un horodatage. Y a-t-il une requête que je peux exécuter qui peut compter le nombre de lignes par heure. Sortie d'une ligne pour chaque heure avec un champ pour le nombre de lignes englobées?mysql nombre de lignes par heure

par exemple

id timestamp 

10 2010-09-19 21:05:05 

11 2010-09-19 22:05:30 

12 2010-09-19 23:05:05 

13 2010-09-19 23:05:05 

number of rows | hour 
1    21 
1    22 
2    23 

Je suppose qu'il pourrait y avoir des problèmes avec l'aide de l'heure car il y aura des heures en double ... alors peut-être « 2010-09-19 21 » ou juste un nombre représentant la période (par exemple dans l'exemple 2010-09-19 21 est 1)

TIA

Répondre

11

Cela dépend de la taille de votre plage de dates est. Si toutes les dates tombent dans un mois, par exemple, vous pouvez le faire:

select day(timestamp) as Day, hour(timestamp) as Hour, count(*) as Count 
from MyTable 
where timestamp between :date1 and :date2 
group by day(timestamp), hour(timestamp) 

Vous pouvez regrouper par année et par mois, ainsi si vous avez besoin de séparer davantage vos données.

+0

+1 Vous pouvez également utiliser TO_DAYS() qui est le nombre de jours écoulés depuis l'année 0. –

+0

@RedFilter Pouvez-vous nous dire comment étendre cela à des mois et des années? – Mawg

2
SELECT HOUR(hour) as hour, COUNT(*) as num_rows FROM `TABLE` GROUP BY HOUR(hour) 
Questions connexes