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()
我有一个包含以下类型销售记录的数据库:
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()