问题:对于包含日期列,任意数量的类别列和值列的给定记录集,我想计算任意日期窗口的值的聚合,例如30天,365天等等。我已经看过窗口集合函数,CTE和其他一些函数,但它们并没有出现(至少对我来说)来执行所需的功能。SQL移动聚合
下面的SQL(T-SQL)代表了我试图完成的基本概念,但是我对它的可伸缩性,特别是连接有不好的感觉,并且一旦我尝试按其他名义组进行分组,就会遇到困难。
SELECT
basedate
, count(*) as [n]
, sum(Value) as [SumValue]
, avg(value) As [AverageValue]
, stdev(value) As [StdevValue]
FROM
(SELECT t1.basedate , t2.*
FROM
(SELECT DISTINCT dt as basedate from foo)as t1
,foo as t2
WHERE datediff(d, t1.basedate, t2.dt) between -30 and 0
) t3
GROUP BY t3.basedate
ORDER BY t3.BASEDATE DESC
我创建了一个SQLFiddle来试图使它更加具体。
谢谢。
您是否使用SQL Server 2008作为你的小提琴建议? – 2015-02-24 17:45:50
我目前正在使用SQL-Server 2008,但这可能是一条Teradata查询。 – user3092841 2015-02-24 17:47:43