2016-09-13 7 views
0

작업 나는이 어디 {senttoclientdate} = 어제 결과를 반환 다음 쿼리를SQL 마지막 일

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

있습니다.

문제는 월요일에 실행하면 일요일 결과가 표시되지만 마지막 근무일을 원합니다. 월요일에 출근하면 금요일 결과가 필요합니다. 당신은 이런 식으로 할 수

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 
+1

시도 사례 및 주간 –

+0

일요일에 쿼리를 실행하면 예상되는 결과는 어떻습니까? – jarlh

+0

화요일이면 어떨까요? 그리고 월요일. 휴가 였어? 당신은 공휴일/제외 된 것을 포함하여 근무일 기준표가 필요합니다. – Beth

답변

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

날짜 부분의 경우

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)