MySQL: Obtenir « le plus occupé » ou « le plus populaire » heure d'un champ datetime?

StackOverflow https://stackoverflow.com/questions/2471546

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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top