我正在工作从星期一开始的几周。我被要求获取过去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周开始。 有没有更好的方法来解决这个问题?
答案 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())))