最后一个工作日DB

问题描述:

我这一周的所有天的数据,我想找到最近的工作日数据即dayofweek != 1 and dayofweek != 7最后一个工作日DB

我笨拙的WHERE与CASE是沿着

WHERE CASE WHEN dayofweek(curdate()) = 1 THEN day(time) = date_sub(day(time), interval 2 day) 
    WHEN dayofweek(curdate()) = 7 THEN day(time) = date_sub(day(time), interval 1 day) 
    WHEN dayofweek(curdate()) != 7 AND dayofweek(curdate()) != 1 THEN day(time) = day(curdate()) ELSE 1 = 1 END 
东西线
+0

向我们展示你到目前为止所拥有的。 – 2013-05-14 16:27:20

+0

另一个考虑;如果是假期或商业关闭的任何一天呢? – 2013-05-14 16:28:41

+0

@ChrisForrence还没有,周一至周五现在就足够了 – rodling 2013-05-14 16:35:06

此代码,day(time) = date_sub(day(time), interval 2 day)从未匹配,因为day(time)从未有过等于day(time) - 1 day。这与在代数中说x=x-1一样......它不是真的。我怀疑你真正的意思是做这样的事情:

WHERE CASE WHEN dayofweek(curdate()) = 1 THEN date(time) = date(date_sub(curdate(), interval 2 day)) 
... 
... 
... This part was left as an exercise for the asker. 

date()功能消除了一部分时间,所以你可以就在一天进行比较。 The date_sub()函数需要从curdate()中减去以获取最近的工作日。在你的代码中,它是从存储在表中的DATETIME中减去的。

+0

是啊傻我只是一个逻辑错误! – rodling 2013-05-16 00:28:26

+1

使用'date()'而不是'day()'也是非常重要的......'day()'返回当月的一天,所以它似乎在第一个月工作,但在第二个月,它将开始从当前月份的最后一个工作日*开始返回行,并从该月份的那一天开始返回行。* – 2013-05-16 00:47:12