MySQL: Obtenir « le plus occupé » ou « le plus populaire » heure d'un champ datetime?
-
20-09-2019 - |
Question
Considérez le tableau suivant qui a les champs - id (int) et date_created (datetime):
id date_created
1 2010-02-25 12:25:32
2 2010-02-26 13:40:37
3 2010-03-01 12:02:22
4 2010-03-01 12:10:23
5 2010-03-02 10:10:09
6 2010-03-03 12:45:03
Je veux savoir l'heure de la journée la plus occupée / le plus populaire pour cet ensemble de données. Dans cet exemple, le résultat que je suis à la recherche serait 12.
Idées?
La solution 4
J'aime les réponses Simon et Peter, mais je ne peux pas sélectionner à la fois comme acceptée. Je combiné les deux pour faire une requête de nettoyage qui ne retourne l'heure populaire (je ne suis pas besoin des comptes).
SELECT hour(date_created) AS h
FROM my_table
GROUP BY h
ORDER BY count(*) DESC
LIMIT 1
Autres conseils
Pour que l'heure la plus populaire, utilisez cette requête
select date_format( date_created, '%H' ) as `hour`
from [Table]
group by date_format( date_created, '%H' )
order by count(*) desc
limit 1;
Si vous voulez regarder toutes les données, rendez-vous avec celui-ci
select count(*) as num_records
, date_created
, date_format( date_created, '%H' ) as `hour`
from [Table]
group by `hour`
order by num_records desc;
Si vous voulez quelque chose d'un peu plus souple, peut-être à la demi-heure, ou un quart d'heure, vous pouvez faire ce qui suit:
SELECT floor(time_to_sec(date_created)/3600),count(*) AS period
FROM table GROUP BY period ORDER BY c DESC
Si vous voulez 2 heure d'intervalle le plus populaire, utilisez 7200. L'intervalle de 15 minutes le plus populaire, utilisez 900. Vous avez juste besoin de se rappeler que vous avez affaire secondes (3600 secondes dans une heure).
Utilisez la fonction hour()
pour extraire l'heure, puis faire l'agrégation habituelle:
SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;
Vous pouvez essayer ceci:
SELECT
DATE_FORMAT(date,'%H') as hours,
count(*) as count
FROM
myTable
GROUP BY
hours
ORDER BY
count DESC