Select 往年相同天数的平均值

Select average of same days of past years

我有一个包含以下类型销售记录的数据库:

   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年前。 现在我需要获得过去 5 年的过去 10 天记录的 3 种产品的平均销售量(例如,平均 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
...              ...               ...               ...               ...

如果我明白你想要的是每种产品在过去五年中同一日期的平均销售额。如果是这样,我认为这可能是您想要的:

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()