2010-06-10 78 views
5

我使用MySQL和我有如下表:集團通過對周/數月的間隔日期範圍

| 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 2010-06-10 08:50:18

+0

@simendsjo令人困惑的格式化 - 我以爲一樣,但讀不整個! – 2010-06-10 08:56:02

+0

對於那個錯誤感到抱歉,這是一個叫日期類型的期限。 – khelll 2010-06-10 08:57:37

回答

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 2010-06-10 09:08:09

+0

出於好奇,如果週期字段是20100609等對應於2010-06-09日期的整數,查詢應如何進行。這種int類型的性能會更好嗎? – khelll 2010-06-10 09:50:40

+0

可能只有當你需要過濾一個日期範圍,因爲你不能按星期過濾(你仍然必須將它作爲日期)。 並記住選擇一個答案:P – Keeper 2010-06-10 10:19:56

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(週期)一起工作,而不檢查結果中的所有日期。這就是爲什麼我喜歡使用WEEK(Period)作爲WeekPeriod,按WeekPeriod分組 – simendsjo 2010-06-10 09:31:31

+0

我主要使用Oracle,您必須按照您選擇的相同字段對其進行分組(您不能通過它來混淆字段和分組)。 我認爲內部查詢是相同的。 – Keeper 2010-06-10 10:17:53