Query MySQL GROUP BY giorno / mese / anno

È possibile fare una semplice query per contare quanti record ho in un determinato periodo di tempo come un anno, un mese o un giorno, avendo un campo TIMESTAMP, come:

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY record_date.YEAR

O anche:

SELECT COUNT(id)
FROM stats
GROUP BY record_date.YEAR, record_date.MONTH

Per avere una statistica mensile.

Grazie!

Soluzione
GROUP BY YEAR(record_date), MONTH(record_date)

Controlla le funzioni di data e ora in MySQL.

Commentari (4)

GROUP BY DATE_FORMAT(record_date, '%Y%m');


Note (principalmente, ai potenziali downvoters). Attualmente, questo potrebbe non essere così efficiente come altri suggerimenti. Tuttavia, la lascio come un'alternativa, e una, anche, che può servire per vedere come sono più veloci altre soluzioni. (Inoltre, con il passare del tempo, potrebbero essere apportate modifiche al motore di MySQL per quanto riguarda l'ottimizzazione, in modo da rendere questa soluzione, ad un certo punto (forse, non così lontano) in futuro, abbastanza paragonabile in efficienza con la maggior parte degli altri.

Commentari (2)

Ho provato ad usare la dichiarazione 'WHERE' di cui sopra, ho pensato che fosse corretta dato che nessuno l'ha corretta ma mi sbagliavo; dopo alcune ricerche ho scoperto che questa è la formula giusta per la dichiarazione WHERE quindi il codice diventa come questo:

SELECT COUNT(id)  
FROM stats  
WHERE YEAR(record_date) = 2009  
GROUP BY MONTH(record_date)
Commentari (0)