2013-02-13 82 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