MySQL группировка по дням - PullRequest
1 голос
/ 06 апреля 2011

У меня есть такая схема:

+-------+
|posts: |
+----+--+--------+--------------------+
| ID |   title   |      timestamp     |
+----+-----------+--------------------+
|  1 |    t1     |2011-04-05 17:54:55 |
+----+-----------+--------------------+ 
|  2 |    t2     |2011-04-06 09:10:11 |
+----+-----------+--------------------+ 
|  3 |    t3     |2011-04-07 02:07:22 |
+----+-----------+--------------------+ 

Как я могу получить общее количество постов за последние 7 дней, сгруппированных так:

monday: 3
Tuesday: 9
Wednesday: 2

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

MySQL конкретные решения:

SELECT WEEKDAY(timestamp_field) AS wd, count(*) FROM your_table GROUP BY wd;

или

SELECT count(*) FROM your_table GROUP BY WEEKDAY(timestamp_field);
2 голосов
/ 06 апреля 2011

Ну,

вам нужно будет выбрать дату, сделать подсчет (*) и сгруппировать по дате.

SELECT date_format(TIMESTAMP, '%d %m')
       , COUNT(*)
FROM posts
WHERE TIMESTAMP BETWEEN FROMDATE AND TODATE
GROUP BY date_format(TIMESTAMP, '%d %m')

дополнительная помощь и объяснение: MySQL Manual дляDATE_FORMAT

РЕДАКТИРОВАТЬ:

Днем недели также можно достичь с помощью этой функции с помощью% W.

1 голос
/ 06 апреля 2011
SELECT WEEKDAY(timestamp), count(*)
FROM POSTS as p1
WHERE DATE_SUB(NOW(), INTERVAL 7 DAY) < timestamp
GROUP BY YEAR(timestamp), MONTH(timestamp), DAY(timestamp)
ORDER BY YEAR(timestamp) desc, MONTH(timestamp) desc, DAY(timestamp) desc

Проверьте функции даты и времени в MySQL.

...