2013-02-13 74 views
0

好的,我正在爲報表編寫一個存儲過程,我需要每個人都有最後一個銷售日期,例如 - 當報告運行時,它將使用今天的日期作爲日期,並且任何其最後一次銷售日期爲6個月或12個月或從今天起18個月的應該在存儲過程中返回。SQL - 最近6個月(12,18,24,30)除以6個月查詢

我最初的想法是使用where子句與;

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

有沒有更好的方法來做到這一點?

+0

如果你想的6增量,似乎你將需要單獨的查詢和'pivot' – Kermit 2013-02-13 16:26:35

回答

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 2013-02-13 17:20:35

+0

如果我明白這個問題,你可以改變連接條件爲'ON T.LastSalesDate BETWEEN DATEADD(WEEK,-2,D.Date)AND DATEADD(WEEK,2,D.Date)' – GarethD 2013-02-13 17:38:20

+0

是的,這是一種享受!幹得好,歡呼 – DtotheG 2013-02-14 09:40:59