【发布时间】:2018-07-01 11:01:57
【问题描述】:
我有一个包含多个时间序列的表,每个时间序列都与一个给定的 ID 相关联。
类似的东西
+--------------------------------------+
| ID | start | end | value |
+--------------------------------------+
| a | 01/01/2018 | 03/01/2018 | 5 |
| a | 03/01/2018 | 04/01/2018 | 6 |
| a | 04/01/2018 | 06/01/2018 | 7 |
| b | 01/01/2018 | 04/01/2018 | 3 |
| b | 04/01/2018 | 06/01/2018 | 4 |
+--------------------------------------+
我们看到时间序列是由不规则间隔定义的。我想“扩展”每个时间序列,以便该系列中每天有一行。
这样
+--------------------------------------+
| ID | start | end | value |
+--------------------------------------+
| a | 01/01/2018 | 02/01/2018 | 5 |
| a | 02/01/2018 | 03/01/2018 | 5 |
| a | 03/01/2018 | 04/01/2018 | 6 |
| a | 04/01/2018 | 05/01/2018 | 7 |
| a | 05/01/2018 | 06/01/2018 | 7 |
| b | 01/01/2018 | 02/01/2018 | 3 |
| b | 02/01/2018 | 03/01/2018 | 3 |
| b | 03/01/2018 | 04/01/2018 | 3 |
| b | 04/01/2018 | 05/01/2018 | 4 |
| b | 05/01/2018 | 06/01/2018 | 4 |
+--------------------------------------+
是否可以在 SQL 中从前者获取后者表,如果可以,请指出正确的方向?
注意:每个时间序列都是连续的,没有重叠的区间。
【问题讨论】:
-
我不明白。到目前为止,您尝试过什么?
-
如果没有某种循环和某种临时表,我看不出如何填充它。
-
您需要在查询语句中执行它还是可以是过程/函数?
-
您想“创建”数据来填补空白,对吧?
-
哦,我找到了一种使用 ROW_NUMBER 和 DATEDIFF 的方法。我在这里进行实验,我会尽快发布答案。
标签: sql sql-server time-series