SQL查询表中的平均最近3天

时间:2016-03-15 11:36:13

标签: sql sql-server

提前感谢您的帮助。任何人都可以帮我用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

1 个答案:

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