2012-11-14 95 views
0

我當前的查詢:MySQL的幾個日期範圍

Select `userSubUnitsID`, `userSubUnits`.`userID`, CONCAT(`u`.`fname`,' ',`u`.`lname`) AS `full`, `pID`, SUM(`quantComp`) AS `total` 
    From `userSubUnits` 
    JOIN `u` ON `u`.`userID` = `userSubUnits`.`userID` 
    GROUP BY `userID` 

我需要的是按日期來得到這個。所以它會看起來更像這樣。

+-----+------------+----------+-------------+ 
    |user |current week|prev week |two weeks ago| 
    +-----+------------+----------+-------------+ 
    |John |   564|  354|   687| 
    +-----+------------+----------+-------------+ 
    |Paul |   451|  328|   845| 
    +-----+------------+----------+-------------+ 
    etc 

這是可能的一個單一的查詢?我知道如何在本週限制它,但不知道如何在前幾周添加。

僅供參考,週末在週日午夜結束。 在此先感謝

+0

'prev week'和'prev week'之間有什麼區別?應該被視爲'上週'和'兩週前'? –

+0

是的,只有一週。對困惑感到抱歉。 – BrinkDaDrink

回答

2
SELECT user, SUM(WEEKOFYEAR(datefield) = WEEKOFYEAR(now()) AS current_week, 
    SUM(WEEKOFYEAR(datefield) = WEEKOFYEAR(now() - INTERVAL 1 WEEK)) AS last_week, 
    SUM(WEEKOFYEAR(datefield) = WEEKOFYEAR(now() - INTERVAL 2 WEEK)) AS two_weeks_ago 
FROM ... 
GROUP BY WEEKOFYEAR(now()) 

醜,但應該做的伎倆。請注意,如果您的日期跨越一年邊界,則此操作將失敗。爲了解決這個問題,你必須添加一些額外的基於年份的邏輯。

同樣,你最好做這種轉換客戶端。如果你需要開始做超過幾周的時間,很快就會變得非常低效,例如:

SELECT user, YEAR(datefield), WEEKOFYEAR(datefield), COUNT(*) 
FROM ... 
GROUP BY YEAR(datefield), WEEKOFYEAR(datefield) 
+0

做多個查詢而不是單個查詢會更好嗎?我只會這樣做2-4周。我明白你得到的週數會很糟糕。 – BrinkDaDrink