动态日期选择

时间:2018-08-09 09:22:08

标签: sql sql-server

我有一些跨越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

2 个答案:

答案 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