选择过去几年当天的平均值

时间:2015-03-04 12:40:56

标签: sql-server sql-server-2014

我的数据库的销售记录类型为:

   DAY         PRODUCT1         PRODUCT2         PRODUCT3         TOTAL
date1(date) salesnumber(int) salesnumber(int) salesnumber(int)   sum(int)
date2(date) salesnumber(int) salesnumber(int) salesnumber(int)   sum(int)
   ...           ...              ...              ...             ...

可以追溯到7年。 现在我需要获得过去10天记录中我的3个产品中每个产品的销售平均值,但过去5年(例如平均04/03/2014,04/03/2013,04/03 / 2012,04 / 03 / 2011,04 / 03/2010),所以我可以将它与今年的记录进行比较,以找出变化。是否有捷径可寻?输出将类似于:

DATES           AVG(product1)      AVG(product2)     AVG(product3)     AVG(Total)             
todaydate       avg_last5years     avg_last5years    avg_last5years    avg_last5years
todaydate-1day  avg_last5years     avg_last5years    avg_last5years    avg_last5years
todaydate-2day  avg_last5years     avg_last5years    avg_last5years    avg_last5years
...              ...               ...               ...               ...

1 个答案:

答案 0 :(得分:0)

如果我理解您想要的是每个产品在过去五年中在同一天销售的平均值。如果是这样,我认为这可能是你想要的:

select 
    s.day, 
    oa.*
from 
    sales s
outer apply (
    select 
       avg(product1*1.0) p1, 
       avg(product2*1.0) p2, 
       avg(product3*1.0) p3, 
       avg(total*1.0) total 
    from 
       sales
    where 
        day(day) = day(s.day) 
    and month(day) = month(s.day) 
    and year(day) >= year(s.day) - 5 
) oa
where 
    s.day between dateadd(day, -10, getdate()) and getdate()