2017-09-07 8 views
1

마지막 지불 상태가 6 개월 전인 계정의 레코드를 가져 오는 코드가 필요합니다. 하지만 내 DateDiff가 작동하지 않는 이유는 잘 모르겠습니다. 지금까지SQL Server 2014에서 6 개월 이상 된 결과를 얻으려면 어떻게해야합니까?

내 코드 :

SELECT A.[AccountId] 
     ,[AccountNumber] 
     ,[AccountTypeId] 
     ,[AccountStatusId] 
     ,[CurrentBalance] 
     ,[PaymentStatusID] 
     ,D.Last_Change 

    FROM [Account] A 
    INNER JOIN ( 
       SELECT AccountId 
        ,MAX(Created) Last_Change 
       FROM PaymentStatusHistory 
       WHERE ToPaymentStatusID IN (1,2,11)    
       GROUP BY AccountId 
      ) D 
       ON A.AccountID = D.AccountId 

    WHERE PaymentStatusID IN (1,2,11) 
    AND AccountStatusId IN (1,2) 
    --AND DATEDIFF (DAY, GETDATE(), D.Last_Change) > 180 --Need THIS line corrected. 

    ORDER BY CurrentBalance DESC, AccountNumber 
+0

"작동하지 않는다"는 것은 무엇을 의미합니까? 오류가 있습니까? 아니면 결과가 예상과 다른가요? – cddt

답변

2

당신은 것은 datediffstarting_dateending_date을 혼합 한합니다.

AND DATEDIFF (DAY, D.Last_Change, GETDATE()) > 180 

Get_date()

, 현재 날짜, 당신의 Last_change 일 이후이어야한다.

+0

고맙습니다. 나는 실수를 깨닫고 그것을 바로 잡았다. 이제 작동합니다. 고마워. – user1777929

0

DATEDIFF에서 순서가 변경되어 작동했습니다.

AND DATEDIFF (DAY, D.Last_Change, GETDATE()) > 180 

이 코드 줄이 작동하고 필요에 따라 결과를 보냈습니다.

1

양수가 필요하면 DATEDIFF의 날짜 순서를 반대로 변경하십시오.

예 : SELECT DATEDIFF(DAY,GETDATE(),'20170101')은 -250을 반환합니다. SELECT DATEDIFF(DAY,'20170101',GETDATE())은 250을 반환합니다.