MySQL Query GROUP BY день / месяц / год - PullRequest
579 голосов
/ 03 февраля 2009

Можно ли сделать простой запрос, чтобы подсчитать, сколько записей у меня есть в определенный период времени, например, год, месяц или день, с полем TIMESTAMP, например:

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

Или даже:

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

Иметь ежемесячную статистику.

Спасибо!

Ответы [ 13 ]

5 голосов
/ 22 мая 2015

Следующий запрос работал для меня в Oracle Database 12c Release 12.1.0.1.0

SELECT COUNT(*)
FROM stats
GROUP BY 
extract(MONTH FROM TIMESTAMP),
extract(MONTH FROM TIMESTAMP),
extract(YEAR  FROM TIMESTAMP);
2 голосов
/ 30 июля 2014

Я предпочитаю оптимизировать выбор группы на один год следующим образом:

SELECT COUNT(*)
  FROM stats
 WHERE record_date >= :year 
   AND record_date <  :year + INTERVAL 1 YEAR;

Таким образом, вы можете просто связать год за один раз, например, '2009', с именованным параметром и не нужно беспокоиться о добавлении '-01-01' или передаче '2010' отдельно.

Кроме того, поскольку предположительно мы просто считаем строки, а id никогда не бывает NULL, я предпочитаю COUNT(*) COUNT(id).

0 голосов
/ 04 июня 2016

.... group by to_char(date, 'YYYY') -> 1989

.... group by to_char(date,'MM') -> 05

.... group by to_char(date,'DD') ---> 23

.... group by to_char(date,'MON') ---> МАЙ

.... group by to_char(date,'YY') ---> 89

...