首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

二个字段的查询,只能用select,不简单

2013-01-28 
2个字段的查询,只能用select,不简单表A1FDate(datetime型)FQty(decimal型,反正算加法)第一列是几年的数据,

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 #TA
group by 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
)
SELECT  O1.YM, SUM(O2.SumQty) AS totalqty
FROM CET AS O1
  JOIN CET AS O2
    ON O2.YM <= O1.YM and o2.YM>dateadd(month,-12,o1.YM)
GROUP BY  O1.YM
ORDER BY  O1.YM;
----------------结果----------------------------
/* 
YM         totalqty
---------- -----------
2010-01-25 5
2010-02-25 8
2010-03-25 11
2010-04-25 20
2011-02-25 125
2011-03-25 130
2011-04-25 140
2011-05-25 151

(8 行受影响)

*/

热点排行