MySQL: Werden Sie die „am stärksten beliebteste“ oder „beliebteste“ Stunde aus einem Bereich "DateTime"?

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

Frage

Betrachten Sie die folgende Tabelle, in der die Felder - ID (int) und Date_Created (DateTime) enthalten sind:

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

Ich möchte die am stärksten beliebteste/beliebteste Stunde des Tages für diese Datenmenge kennen. In diesem Beispiel wäre das Ergebnis, das ich suche, 12.

Ideen?

War es hilfreich?

Lösung 4

Ich mag sowohl die Antworten von Simon als auch Peter, aber ich kann beide nicht als akzeptiert auswählen. Ich habe die 2 kombiniert, um eine sauberere Anfrage zu machen, die nur die beliebte Stunde zurückgab (ich brauche die Zählungen nicht).

SELECT hour(date_created) AS h 
FROM my_table 
GROUP BY h 
ORDER BY count(*) DESC 
LIMIT 1

Andere Tipps

Verwenden Sie diese Abfrage, um nur die beliebteste Stunde zu erhalten

select date_format( date_created, '%H' ) as `hour`
  from [Table]
 group by date_format( date_created, '%H' )
 order by count(*) desc
 limit 1;

Wenn Sie sich alle Daten ansehen möchten, gehen Sie mit diesem ein

select count(*) as num_records
     , date_created
     , date_format( date_created, '%H' ) as `hour`
  from [Table]
 group by `hour`
 order by num_records desc;

Wenn Sie etwas flexibleres wollen, vielleicht bis zur halben Stunde oder der viertelstündigen Stunde, können Sie Folgendes tun:

SELECT floor(time_to_sec(date_created)/3600),count(*) AS period 
FROM table GROUP BY period ORDER BY c DESC

Wenn Sie das beliebteste 2 -Stunden -Intervall wünschen, verwenden Sie 7200. Das beliebteste 15 -Minuten -Intervall, verwenden Sie 900. Sie müssen sich nur daran erinnern, dass Sie mit Sekunden (3600 Sekunden in einer Stunde) zu tun haben.

Verwenden Sie das hour() Funktionieren Sie die Stunde, um dann die übliche Aggregation durchzuführen:

SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;

Sie könnten dies versuchen:

SELECT 
  DATE_FORMAT(date,'%H') as hours, 
  count(*) as count 
FROM 
  myTable 
GROUP BY 
  hours 
ORDER BY 
  count DESC
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top