如何在过去52个iso周内获取SQL

时间:2019-03-13 14:29:33

标签: sql sql-server-2008 sql-server-2008-r2

我正在工作从星期一开始的几周。我被要求获取过去52周的数据。所以我用iso_week。 下面的代码在2018年的第一周开始。

 SELECT  YEAR(DATEADD(day, 26 - DATEPART(isoww, [ShipDate]), [ShipDate]))as ISOYEAR
       ,DATEPART(ISO_WEEK, [ShipDate]) as ISOWEEK
      ,SUM([Ordered])
      ,SUM([Shipped])
  FROM [dbo].[DailyOrders]
  where product = 100203
  and DC='NY'
  and DATEPART(ISO_WEEK, [ShipDate]) >= -52
  and YEAR(DATEADD(day, 26 - DATEPART(isoww, [ShipDate]), [ShipDate]))>=2018
  GROUP BY YEAR(DATEADD(day, 26 - DATEPART(isoww, [ShipDate]), 
  [ShipDate])),DATEPART(ISO_WEEK, [ShipDate])
  ORDER BY 1

但是,最后52周应该是从2018年第6周开始,而不是从2018年第1周开始。 有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

是的,如果您对子查询执行INNER JOIN,而该子查询在上周拥有52个查询。 (以约会为条件)。

创建一个临时表,并在每周的UPDATE上使用WHILE循环和DATEADD函数。您可以在存储过程中完成所有这些操作。

答案 1 :(得分:0)

我期望这样的事情:

 [ShipDate] >= dateadd(week, -52, getdate())

当然,您希望按周进行操作,所以:

 [ShipDate] >= dateadd(week, -52, dateadd(day, - datepart(dw, getdate()), convert(date, getdate())))