MySQL: Ottenere o un'ora “trafficato” “più popolare” da un campo datetime?
-
20-09-2019 - |
Domanda
Si consideri la seguente tabella che ha i campi - id (int) e 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
Vorrei sapere il più attivo / ora più popolare del giorno per questo insieme di dati. In questo esempio, il risultato che sto cercando sarebbe 12.
idee?
Soluzione 4
Mi piacciono entrambi risposte Simon e Pietro, ma non riesco a selezionare sia come accettato. Ho unito il 2 per effettuare una query più pulita che ha restituito solo l'ora popolare (non ho bisogno i conteggi).
SELECT hour(date_created) AS h
FROM my_table
GROUP BY h
ORDER BY count(*) DESC
LIMIT 1
Altri suggerimenti
Per ottenere solo l'ora più popolare, utilizzare questa query
select date_format( date_created, '%H' ) as `hour`
from [Table]
group by date_format( date_created, '%H' )
order by count(*) desc
limit 1;
Se si vuole guardare a tutti i dati, andare con questo
select count(*) as num_records
, date_created
, date_format( date_created, '%H' ) as `hour`
from [Table]
group by `hour`
order by num_records desc;
Se volete qualcosa di un po 'più flessibile, forse per la mezz'ora o quarto d'ora, è possibile effettuare le seguenti operazioni:
SELECT floor(time_to_sec(date_created)/3600),count(*) AS period
FROM table GROUP BY period ORDER BY c DESC
Se si desidera che la più famosa intervallo di due ore, utilizzare 7200. Il più popolare intervallo di 15 minuti, utilizzare 900. Hai solo bisogno di ricordare che si tratta di secondi (3600 secondi in un'ora).
Utilizzare la funzione hour()
per estrarre l'ora, quindi fare la solita aggregazione:
SELECT count(hour(date_created)) AS c, hour(date_created) AS h FROM table GROUP BY h ORDER BY c DESC;
Si potrebbe provare questo:
SELECT
DATE_FORMAT(date,'%H') as hours,
count(*) as count
FROM
myTable
GROUP BY
hours
ORDER BY
count DESC