2010-06-10 2 views
5

Я использую MySQL и у меня есть следующая таблица:Group по диапазону дат на недели/месяцы интервал

| clicks | int | 
| period | date | 

Я хочу, чтобы иметь возможность создавать отчеты, как это, когда периоды сделаны в последние 4 недель:

| period | clicks | 
| 1/7 - 7/5 | 1000 | 
| 25/6 - 31/7 | .... | 
| 18/6 - 24/6 | .... | 
| 12/6 - 18/6 | .... | 

или в течение последних 3-х месяцев:

| period | clicks | 
| July | .... | 
| June | .... | 
| April | .... | 

Любые идеи, как сделать запросов на выборку, которая может генерировать equivale nt диапазон дат и количество кликов?

+1

Ваше хранение вашей даты как int? Как выглядит это поле? – simendsjo

+0

@simendsjo Confusing Formatting - я думал то же самое, но читал не вниз! –

+0

Извините за эту ошибку, это период с названием даты с типом даты. – khelll

ответ

11
 
SELECT 
WEEKOFYEAR(`date`) AS period, 
SUM(clicks) AS clicks 
FROM `tablename` 
WHERE `date` >= CURDATE() - INTERVAL 4 WEEK 
GROUP BY period 

SELECT 
MONTH(`date`) AS period, 
SUM(clicks) AS clicks 
FROM `tablename` 
WHERE `date` >= CURDATE() - INTERVAL 3 MONTH 
GROUP BY period 

+0

Это лучший чек на этот период, я исправил свой ответ, чтобы отразить его. – Keeper

+0

Из любопытства, как должны быть запросы, если поле периода является целым числом, как 20100609, что соответствует дате 2010-06-09. Будет ли производительность лучше в таком int-типе? – khelll

+0

Возможно, только если вам нужно отфильтровать диапазон дат, потому что вы не можете фильтровать по неделям (вам все равно придется указывать его как дату). И не забудьте выбрать ответ: P – Keeper

3

За последние 3 месяца вы можете использовать:

SELECT MONTH(PERIOD), SUM(CLICKS) 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 3 MONTH 
GROUP BY MONTH(PERIOD) 

или в течение последних 4 недель:

SELECT WEEK(PERIOD), SUM(CLICKS) 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK 
GROUP BY WEEK(PERIOD) 

код не тестировался.

+0

Я не знаю, работает ли оптимизатор с НЕДЕЛЯ (Период), не проверяя все даты в результатах. Вот почему я люблю использовать WEEK (Period) AS WeekPeriod, Group by WeekPeriod – simendsjo

+0

Я использую в основном Oracle, для которого вам нужно группироваться по тому же выбранному полю (вы не можете псевдоним поля и группы). Я думаю, что внутренне запрос тот же. – Keeper

Смежные вопросы