2016-09-13 31 views
0

我有以下查询SQL最后工作

select Case.casekey, LoginName, startdatedate, SenttoClientDate 
from case with (nolock) 
where SenttoClientDate = dateadd(day,-1, cast(getdate() as date)) 

这将返回结果,其中{} senttoclientdate昨日=。

问题是,如果我在星期一运行这个功能,我会得到星期天的结果,但我想要上一工作日。所以如果我在星期一跑步,我想要周五的成绩。

+1

尝试CASE和WEEKDAY –

+0

如果您在星期天运行查询,预期结果如何? – jarlh

+0

如果是星期二怎么办?和周一。假期?你需要一个工作日的表格,包括你的假期/不论排除在外。 – Beth

回答

0

的情况下扔在日期部分

where SentToClientDate = 
    case when datepart(dw,getdate()) = 2 then dateadd(day,-3,getdate()) -- Monday is day 2, for no reason whatsoever 
     else dateadd(day,-1,getdate()) 
    end 
0

你可以这样说:

WHERE SenttoClientDate = (SELECT DATEADD(DAY, CASE DATENAME(WEEKDAY, GETDATE()) 
        WHEN 'Sunday' THEN -2 
        WHEN 'Monday' THEN -3 
        ELSE -1 END, DATEDIFF(DAY, 0, GETDATE()))) 
0

在病症使用的外壳下面,

select Case.casekey, LoginName, startdatedate, SenttoClientDate 
    from case with (nolock) 
    where SentToClientDate = 
    case when datepart(dw,getdate()) = 2 then dateadd(day,-3,getdate()) 
     when datepart(dw,getdate()) = 1 then dateadd(day,-2,getdate()) 
     else dateadd(day,-1,getdate()) 
    end 
0

能不能请你有了这个,这是非常简单和完美的解决方案:

SELECT Case.casekey, LoginName, startdatedate, SenttoClientDate 
FROM case with (nolock) 
WHERE SenttoClientDate = 
CAST(DATEADD(dd, 
    CASE WHEN DATEPART(weekday, GETDATE()) = 6 THEN 0 
    ELSE (6-(DATEPART(weekday, GETDATE())+7)) END, GETDATE()) AS DATE)