2012-11-26 39 views
1

我遇到的問題是運行此查詢時,它會從當前日期(從當前日期減去7天)開始周間隔。我想在之前的10周內完成(星期一至星期一)。因此,如果我現在的日期是在星期一,星期二或星期三,我希望它在最近的星期日開始,然後回顧前10周。我相信我必須使用在DATE_SUBWEEKDAYDAYOFWEEK但無濟於事曾嘗試:MySql SELECT WHERE日期大於過去10周(從上週日開始)

SELECT 
    SUM(MT.QUANTITY) as qty, 
    WEEKDAY(MT.TRANS_DATE) AS WEEKDAY, 
    WEEK(MT.TRANS_DATE) AS WEEK, 
    YEAR(MT.TRANS_DATE) AS YEAR 
FROM 
    mytable MT 
WHERE 
     MT.TRANS_DATE > DATE_SUB(CURDATE(), INTERVAL 10 WEEK) 
GROUP BY WEEK 

回答

4

嘗試用DATE_SUB(STR_TO_DATE(CONCAT(YEAR(CURDATE()),WEEK(CURDATE()),' Sunday'), '%X%V %W'),INTERVAL 10 WEEK),像這樣:

SELECT 
    SUM(MT.QUANTITY) as qty, 
    WEEKDAY(MT.TRANS_DATE) AS WEEKDAY, 
    WEEK(MT.TRANS_DATE) AS WEEK, 
    YEAR(MT.TRANS_DATE) AS YEAR 
FROM 
    mytable MT 
WHERE 
     MT.TRANS_DATE > DATE_SUB(STR_TO_DATE(CONCAT(YEAR(CURDATE()),WEEK(CURDATE()),' Sunday'), '%X%V %W'),INTERVAL 10 WEEK) 
GROUP BY WEEK 

你也可以用其他的方式段落符號提示:

SUBDATE(CURDATE(), DAYOFWEEK(CURDATE()) - 1) 

這是一個小更具有可讀性...

+1

+1我發現計算「本週的星期天」爲'SUBDATE(CURDATE(),DAYOFWEEK(CURDATE()) - 1)'比字符串操作FWIW更容易閱讀。但是,執行不應有任何區別,因爲兩者都是不變的。 – pilcrow

+0

@pilcrow有道理,更新的答案包括你的方法:)... – DarkAjax