笔记221 每一行记录的前3行记录的第二列相加再平均

笔记221 每一行记录的前3行记录的第二列相加再平均

 1 --每一行记录的前3行记录的第二列相加再平均
 2 --http://social.technet.microsoft.com/Forums/zh-CN/sqlserverzhchs/thread/1151ea2d-6c0f-4c83-aa15-e7ab78a5844e
 3 --下面这个怎么用sql实现?
 4 --id  Sales_vol      mov_avg
 5 --1     1
 6 --2     2
 7 --3     3           =(1+2+3)/3
 8 --4     5           =(2+3+5)/3
 9 --5     4           =(3+5+4)/3
10 --6     2           =(5+4+2)/3
11 --7............
12 
13 
14 --> 测试数据:@t
15 declare @t table
16 ([id] int,[Sales_vol] int)
17 insert @t
18 select 1,1 union all
19 select 2,2 union all
20 select 3,3 union all
21 select 4,5 union all
22 select 5,4 union all
23 select 6,2
24 
25 select a.*,b.Sales_vol,c.Sales_vol
26 from @t a
27 left join @t b on a.id=b.id+1
28 left join @t c on a.id=c.id+2
29 /*
30 id          Sales_vol   Sales_vol   Sales_vol
31 ----------- ----------- ----------- -----------
32 1           1           NULL        NULL
33 2           2           1           NULL
34 3           3           2           1
35 4           5           3           2
36 5           4           5           3
37 6           2           4           5
38 */
39 
40 --id不连续的时候用row_number()生成一个连续的序号,用序号来处理即可。
41 
42 select
43      a.[id],a.[Sales_vol],
44      (a.Sales_vol+b.Sales_vol+c.Sales_vol)/3.00 as mov_avg
45 from @t a
46 left join @t b on a.id=b.id+1
47 left join @t c on a.id=c.id+2
48 /*
49 id          Sales_vol   mov_avg
50 ----------- ----------- ------------------------------
51 1           1           NULL
52 2           2           NULL
53 3           3           2.000000
54 4           5           3.333333
55 5           4           4.000000
56 6           2           3.666666
57 */

 

posted @ 2013-08-04 13:45 桦仔 阅读(...) 评论(...) 编辑 收藏