2013-02-13 5 views
0

좋아요, 보고서 저장 프로 시저를 작성하고 있으며 거기에 마지막으로 판매 된 날짜가있는 모든 사람에게 6의 약수가 필요합니다. 예 - 보고서가 실행될 때 날짜로 오늘 날짜를 사용하며 마지막 판매 날짜가 정확히 6 개월이거나 12 개월 또는 18 개월 이후의 날짜를 저장 프로 시저에 반환해야합니다.SQL - 6 개월 쿼리로 지난 6 개월 (12,18,24,30) 제수

내 생각은 where 절을 다음과 같이 사용하는 것입니다.

WHERE LastSaleDate = DATEADD(m, -6, @Date) 
    OR LastSaleDate = DATEADD(m, -12, @Date)... 

더 좋은 방법이 있나요?

+0

은 6 단위를 원하는 경우에, 당신이 별도의 쿼리와'pivot'가 필요합니다 보인다 – Kermit

답변

2

6 개월 단위로 날짜 목록에 가입 할 수 있습니다. 전체 DDL없이 나는 전체 쿼리를 만들 수는 없지만, 이런 식으로 뭔가를 사용하여 할 수 있어야한다 :

SELECT * 
FROM T 
     INNER JOIN 
     ( SELECT [Date] = DATEADD(MONTH, - Number, @Date) 
      FROM Master..spt_values 
      WHERE Type = 'P' 
      AND  Number % 6 = 0 
     ) D 
      ON D.Date = T.LastSalesDate 
+0

그게 좋겠어, 훌륭해, 고마워! 한 가지 추가 사항은 날짜의 2 주 이내에 있었던 경우입니다. DATEADD (MONTH, -Number, (@ Date + 14)), 가능합니까? – DtotheG

+0

문제가 맞다면 조인 조건을 'ON T.LastSalesDate DATEADD (WEEK, -2, D.DATE) AND DATEADD (WEEK, 2, D.DATE)'로 변경할 수 있습니다. – GarethD

+0

그래도 대우를 받았습니다! 좋은 직업, 환호 – DtotheG

관련 문제