如何在两周前在MYSQL中选择?

时间:2011-07-13 18:31:08

标签: mysql sql

我有一个由sql查询驱动的报告,如下所示:

   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

由于这是与当前付费期的时间进行比较,因此会导致错误 我们的支付期从星期日开始,第一个支付期是2011-02-01,我们的最后一个支付期从本月4日开始。如何将其放入我的where语句中以从查询中删除最近的支付期?

编辑:所以现在我正在使用date_sub(now(),INTERVAL 2 WEEK)但我真的需要一周中的某一天(SUNDAY),因为它是周三它正在周三砍掉它。

2 个答案:

答案 0 :(得分:34)

您想使用DATE_SUBan 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实例来测试它......但基本上减去星期一之后的天数。)

答案 1 :(得分:2)

问题不是很清楚,特别是在编辑之后 - 目前尚不清楚现在是两周的“支付期”还是你想要从上周日回来的最后两周?我假设这段时间是两周......那么你首先需要知道最近一段时间(你想忽略它,因为它还没有结束)已经进行了多少天。要获得该天数,您可以使用

之类的表达式
DATEDIFF(today, FirstPeriod) % 14

其中FirstPeriod2011-02-01。现在,您使用date_sub()从查询中的当前日期中删除该天数。确切的表达式取决于周期的定义方式,但你应该明白......