我有一些跨越3年的 每周 数据,并且我编写了提取过去104周数据的代码(数据截至2014年12月26日,因此我选择了2013年1月2日以来的所有内容)。
您知道我该如何修改代码(如下),以便无论查询何时运行,它都能获取最近两年的数据?例如,如果数据在下周运行,并且数据是直到上周可用的此处输入代码,我希望它基于上周获取最近104周的数据。
如果您知道,是否可以修改下面的代码?
我正在使用Sql Server Management Studio2014。
select
pz.PriceZoneID,
pz.Name,
CAST (ash.Date as date) as Date,
format(sum (Sales), '#,###') as SalesByZone
from AggregatedSalesHistory as ash
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSid
join PriceZone as pz on pz.PriceZoneID = ash.PriceZoneID
WHERE ash.date >= '2013-01-02' and ash.date<= '2014-12-24'
group by pz.PriceZoneID,
pz.Name,
ash.Date
order by PriceZoneID,
ash.Date
答案 0 :(得分:3)
取决于您如何定义两年,但是可以,只需更改到目前为止的位置,例如两年;
WHERE ash.date >= dateadd(year, -2, getdate()) and ash.date <= getdate()
如果您想获得整整2年的服务,那么从年初开始,情况会更像是;
WHERE ash.date >= DATEADD(yy, DATEDIFF(yy, 0, DATEADD(YEAR, -2, GETDATE())), 0) and ash.date <= DATEADD(yy, DATEDIFF(yy, 0, DATEADD(YEAR, -1 ,GETDATE())) + 1, -1)
答案 1 :(得分:2)
请参见此修改:如果您将日期声明为DECLARE @DATE DATE= '2013-01-02'
,则与@date相距仅2年,即可获取最近2年的数据。
WHERE
ash.date BETWEEN dateadd(year, -2, @DATE) and @DATE
根据您的要求(
我希望它能基于上周获得最近104周的数据
)。
您可以:
WHERE
ash.date BETWEEN dateadd(WEEK, -104, @DATE) and @DATE
请参阅下面的完整代码
DECLARE @DATE DATE= '2013-01-02'
select
pz.PriceZoneID,
pz.Name,
CAST (ash.Date as date) as Date,
format(sum (Sales), '#,###') as SalesByZone
from AggregatedSalesHistory as ash
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSid
join PriceZone as pz on pz.PriceZoneID = ash.PriceZoneID
WHERE
ash.date BETWEEN dateadd(year, -2, @DATE) and @DATE
group by pz.PriceZoneID,
pz.Name,
ash.Date
order by PriceZoneID,
ash.Date