MySQL: Werden Sie die „am stärksten beliebteste“ oder „beliebteste“ Stunde aus einem Bereich "DateTime"?
-
20-09-2019 - |
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?
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