如何识别时间序列数据中的连续时间跨度并计算汇总统计量?
需求说明
我已经将时间序列数据整理成如下格式的#temp临时表:
| Start | Finish | Value |
|---|---|---|
| 2022-05-12 11:30 | 2022-05-12 11:45 | 28.264 |
| 2022-05-12 11:45 | 2022-05-12 12:00 | 28.262 |
| 2022-05-12 12:00 | 2022-05-12 12:15 | 28.242 |
| 2022-06-09 11:30 | 2022-06-09 11:45 | 27.862 |
| 2022-06-09 12:00 | 2022-06-09 12:15 | 13.727 |
| 2022-06-09 12:15 | 2022-06-09 12:30 | 13.717 |
| 2022-06-09 12:30 | 2022-06-09 12:45 | 13.724 |
| 2022-06-09 12:45 | 2022-06-09 13:00 | 9.1226 |
我需要识别数据中下一行Start时间与当前行Finish时间完全衔接的连续时间跨度,然后计算每个连续跨度内Value的平均值和最大值,期望结果如下:
| Start | Finish | AvgVal | MaxVal |
|---|---|---|---|
| 2022-05-12 11:30 | 2022-05-12 12:15 | 28.256 | 28.264 |
| 2022-06-09 11:30 | 2022-06-09 11:45 | 27.862 | 27.862 |
| 2022-06-09 12:00 | 2022-06-09 13:00 | 12.573 | 13.727 |
我的思路与困惑
我考虑用PARTITION来分区,但不知道怎么基于「下一行Start等于当前行Finish」这个条件来划分分区。用过程式写法实现很简单,但我需要在存储过程里完成,所以希望用纯声明式SQL写法。
我想过先给初始表加个行号:
ROW_NUMBER() OVER (ORDER BY Start ASC) as Row_Num
然后尝试写聚合查询:
SELECT Start, Finish, AVG(Value) AS AvgVal, MAX(Value) AS MaxVal FROM #temp PARTITION BY
但不知道怎么通过行号关联下一行,比较时间来完成分区。恳请帮忙解决。
内容的提问来源于stack exchange,提问作者Naman Shah
相关产品推荐
相关产品推荐

