2013-09-18 2 views
0

У меня есть таблица вроде этого:SQL возвращать записи отсчетов с интервалом X

id | created_on 
1  2013-09-03 20:05:09 
2  2013-09-05 17:03:13 
... 

Как написать запрос, чтобы вернуть результат звукозаписывающего подсчета, который был создан из Date X в Y Даты в 7- дневные интервалы?

Так что результат будет выглядеть следующим образом:

count | created_on 
4  2013-09-17 00:00:00 
2  2013-09-24 00:00:00 
1  2013-09-31 00:00:00 
10  2013-10-07 00:00:00 
... 

ответ

3

Вы можете перейти к началу недели, вычитая день недели. Вот один из способов сделать это:

select date(created_on - interval dayofweek(created_on) day), count(*) 
from t 
group by date(created_on - interval dayofweek(created_on) day); 

Если это не день, когда вы хотите, чтобы начать неделю, то можно добавить день смещение.

+0

Что о времени части? – Nicole

+0

@NickC. , , Исправлено использование функции 'date()'. –

+0

+1 Обычно я включаю ключевое слово интервальных единиц, например 'DAY' после номера, например.' - INTERVAL 2 DAY' Я никогда не видел такого выражения без единиц, DAY, HOUR, MINUTE и т. Д. Просто добавьте предикат диапазона на 'created_on', чтобы ограничить строки ...' WHERE created_on> = '2013-07-01' AND created_on <'2013-09-01'' – spencer7593

1

Группа по полю даты, округляется недели:

SELECT 
    count(*), 
    YEARWEEK(created_on) as week 
FROM 
    yourtable 
GROUP BY week 

Это предполагает, что created_on тип, который можно интерпретировать как дата:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_yearweek

Это позволит получить у ou, но вы можете затем преобразовать это поле (которое будет выглядеть как YYYYWW) назад к чему-то более читаемому.

1

Вы можете попробовать это

SELECT created_on, count(id) AS count 
FROM `test_table` 
WHERE created_on 
BETWEEN '2013-09-01' 
AND '2013-10-10' 
GROUP BY WEEK(created_on) 
Смежные вопросы