提前感谢您的帮助。任何人都可以帮我用SQL查询
我有每日表格
> Date | Sales_Rep_ID| Product ID | Zone | Sales
> 31 Jan 2015 | 001 | P01| EMEA | 10
> 31 Jan 2015 | 002 | P02| EMEA | 10
> 31 Jan 2015 | 003 | P02| EMEA | 10
> 30 Jan 2015 | 001 | P01| EMEA | 8
> 30 Jan 2015 | 002 | P02| EMEA | 7
> 30 Jan 2015 | 003 | P02| EMEA | 2
并希望在最后一列中平均最后n天,具体取决于日期,代表ID,产品ID
Date | Sales_Rep_ID| Product ID | Zone | Sales | AVG_3_DAYS
31 Jan 2015 | 001 | P01 | EMEA | 10 | 9
31 Jan 2015 | 002 | P02 | EMEA | 10 | 8.5
31 Jan 2015 | 003 | P02 | EMEA | 10 | 6
30 Jan 2015 | 001 | P01 | EMEA | 8 | .
30 Jan 2015 | 002 | P02 | EMEA | 7 | .
30 Jan 2015 | 003 | P02 | EMEA | 2 | .
例如
第1行的日期是31日,我们需要31,30的平均值,29日销售代表001和产品ID 002
并且对于第4行的日期是30日,我们需要30,29,38的平均销售代表001和产品ID 002
答案 0 :(得分:1)
在SQL Server中,您可以使用apply
来实现此目的:
select t.*, tt.avgsales
from t outer apply
(select avg(sales) as avgsales
from t t2
where t2.rep_id = t.rep_id and
t2.product_id = t.product_id
t2.date <= t.date and
t2.date > dateadd(day, -3, t.date)
) tt;