首页 > 代码库 > mssql 循序渐进累加函数
mssql 循序渐进累加函数
1.如下图,构建初始降雨量
2.对这些降雨量进行排序,大部分的操作这一步可以省略,用不到包括后续的rank
3.观察上图,如果我们要累加,其实就是当天加上这一天之前的降雨量之和,所以可以写出如下的
附上sql代码如下:
SELECT row_number () OVER (ORDER BY 时间) rank, * INTO #t FROM (SELECT ‘2016-08-28‘ 时间, 200 降雨量 UNION ALL SELECT ‘2016-08-29‘ 时间, 0 降雨量 UNION ALL SELECT ‘2016-08-30‘ 时间, 500 降雨量 UNION ALL SELECT ‘2016-08-31‘ 时间, 700 降雨量 UNION ALL SELECT ‘2016-09-01‘ 时间, 100 降雨量 UNION ALL SELECT ‘2016-09-02‘ 时间, 0 降雨量 UNION ALL SELECT ‘2016-09-03‘ 时间, 900 降雨量) aSELECT a1.时间, a1.降雨量, sum (a2.降雨量) 累计降雨量 FROM #t a1 INNER JOIN #t a2 ON a2.rank <= a1.rankGROUP BY a1.时间, a1.降雨量ORDER BY a1.时间DROP TABLE #t
4.也可以不需要利用row_number() 而直接利用日期作为条件,效果跟3一样:
代码:
SELECT * INTO #t FROM (SELECT ‘2016-08-28‘ 时间, 200 降雨量 UNION ALL SELECT ‘2016-08-29‘ 时间, 0 降雨量 UNION ALL SELECT ‘2016-08-30‘ 时间, 500 降雨量 UNION ALL SELECT ‘2016-08-31‘ 时间, 700 降雨量 UNION ALL SELECT ‘2016-09-01‘ 时间, 100 降雨量 UNION ALL SELECT ‘2016-09-02‘ 时间, 0 降雨量 UNION ALL SELECT ‘2016-09-03‘ 时间, 900 降雨量) aSELECT a1.时间, a1.降雨量, sum (a2.降雨量) 累计降雨量 FROM #t a1 INNER JOIN #t a2 ON a2.时间 <= a1.时间GROUP BY a1.时间, a1.降雨量ORDER BY a1.时间DROP TABLE #t
为什么3这样写能查出来我们想要的样子,我们只是用前三天就可以看到
可以观察到,小于8月28号的记录是8月28,小于8月29的是28和29两天,我们把这些数据捏在一起,就能轻松地对作为a1日期进行分组累加,最终得到自己想要的数据。
mssql 循序渐进累加函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。