2011-07-13 42 views
11

我有一個是由一個外形像這樣的SQL查詢驅動的報告:如何在MYSQL中選擇兩週前?

SELECT batch_log.userid, 
     batches.operation_id, 
     SUM(TIME_TO_SEC(ramses.batch_log.time_elapsed)), 
     SUM(ramses.tasks.estimated_nonrecurring + ramses.tasks.estimated_recurring), 
     DATE(start_time) 
    FROM batch_log 
    JOIN batches ON batch_log.batch_id=batches.id 
    JOIN ramses.tasks ON ramses.batch_log.batch_id=ramses.tasks.batch_id 
    JOIN protocase.tblusers on ramses.batch_log.userid = protocase.tblusers.userid 
    WHERE DATE(ramses.batch_log.start_time) > "2011-02-01" 
    AND ramses.batch_log.time_elapsed > "00:03:00" 
    AND DATE(ramses.batch_log.start_time) < now() 
    AND protocase.tblusers.active = 1 
    AND protocase.tblusers.userid NOT in ("ksnow","smanning", "dstapleton") 
GROUP BY userid, batches.operation_id, date(start_time) 
ORDER BY start_time, userid ASC 

因爲這是與它會導致錯誤的電流payperiod的時間進行比較。
我們的薪酬期從星期日開始,第一期支付期爲2011年2月1日,而我們的最後一期支付期從本月4日開始。我如何將它放到我的where語句中去除查詢中最近的付款期限? (現在(),間隔2周),但我真的需要一個星期的特定日子(星期日),因爲它是星期三它在星期三切斷它。所以現在我使用date_sub(now(),INTERVAL 2 WEEK)。

+4

查看[MySQL日期和時間函數](http://dev.mysql.com/doc/refman/5.5/en/ date-and-time-functions.html),即DATE_SUB() –

回答

27

你想使用DATE_SUB,並且作爲an example

具體做法是:

select DATE_SUB(curdate(), INTERVAL 2 WEEK) 

讓你兩個星期前。將DATE_SUB ...部分插入到你的sql中,你很好。按您的評論

編輯:

退房DAYOFWEEK:

,你可以做線沿線的東西:

DATE_SUB(DATE_SUB(curdate(), INTERVAL 2 WEEK), INTERVAL 2 + DAYOFWEEK(curdate()) DAY) 

(我沒有一個MySQL實例進行測試對..但基本上減去星期一後的天數。)

2

問題不是很清楚,特別是在編輯之後 - 現在還不清楚是「支付期限」兩週或d你想從上週日回來兩週嗎?我認爲這段時間是兩週......那麼你首先需要知道最近一段時間(你想忽略的時間,因爲它還沒有結束)一直在持續。要獲得天數,你可以使用語句,比如

DATEDIFF(today, FirstPeriod) % 14 

其中FirstPeriod2011-02-01。現在,您使用date_sub()從查詢中的當前日期中刪除該天數。確切的表達取決於如何定義時間段,但你應該明白...