日期:2014-05-17  浏览次数:20520 次

2个字段的查询,只能用select,不简单
表A1
FDate(datetime型)          FQty(decimal型,反正算加法)
第一列是几年的数据,有很多条(上十万),日期和数量都可能重复,我要求是输出每个月的25号(中间连续的),对应的数量是到前一个月25日再往前一年内的数量和。下面给具体例子

2009-12-23 。。。               5
2010-01-20 00:00:00         1
2010-01-25 。。。              2
2010-01-26 。。。。            3
这里省略多行(数量就算0吧)
2010-02-27 。。。。            4
2010-03-25 。。。。            5
2010-12-26.。。。              100
再次省略
2011-01-23 。。。。            6
2011-01-25 。。。。            7
2011-02-03 。。。。            8
2011-03-03 。。。。            9
2011-03-25 。。。。            10
2011-03-26(或者2011-04-01)  11



后面就不写啦
输出的是
date                   qty
2009-12-25            0
2010-01-25             5                (这里算的是2008-12-26到2009-12-25)
2010-02-25             5+1+2=3(只输出8
2010-03-25            5+1+2+3=11(只输出11
2010-04-25             11+4+5=20     (这里算的是2009-03-26到2010-03-25)
每个月都不能少05-25,06-25等等
2010-12-25             5+1+2+3+4+5=20   (2009-11-26到2010-11-25)
2011-01-25             1+2+3+4+5=15  (2009-12-26到2010-12-25)
2011-02-25             3+4+5+100+6+7=125  (2010-01-26到2011-01-25)
2011-03-25             4+5+100+6+7+8=130  (2010-02-26到2011-02-25)
2011-04-25             100+6+7+8+9+10=140  (2010-03-26到2011-03-25)
2011-05-25             100+6+7+8+9+10+11=151  (2010-04-26到2011-04-25)
(如果2011-03-26(或者2011-04-01)是最后一条,就写到这里就好了,实际上有3年的数据,50多万条)
sql?,server,select

------解决方案--------------------
25号取到前一个月去了,更正一下
--滑动聚合
;WITH CET AS
(
select case when datepart(DD,dt)>25 then convert(varchar(7), DATEADD(MM,2,dt),120) + '-25' 
else convert(varchar(7), DATEADD(MM,1,dt),120) + '-25' end as YM, SUM(Qty) SumQty 
from