【发布时间】:2021-05-20 02:26:51
【问题描述】:
想象一下我有一张这样的桌子
| ID | Date |
|---|---|
| 1 | 2021-01-01 |
| 1 | 2021-01-05 |
| 1 | 2021-01-17 |
| 1 | 2021-02-01 |
| 1 | 2021-02-18 |
| 1 | 2021-02-28 |
| 1 | 2021-03-30 |
| 2 | 2021-01-01 |
| 2 | 2021-01-14 |
| 2 | 2021-02-15 |
我想选择此表上的所有数据,但要使用新的 Event_ID 创建一个新列。事件定义为在 15 天的时间范围内具有相同 ID 的所有行。问题是我希望时间框架移动 - 就像前 3 行一样:第 2 行在第 1 行的 15 天内(因此它们属于同一事件)。第 3 行在第 2 行的 15 天内(但距离第 1 行更远),但我希望将其添加到与以前相同的事件中。 (注意:表格没有像示例中那样排序,只是为了方便)。
输出应该是
| ID | Date | Event_ID |
|---|---|---|
| 1 | 2021-01-01 | 1 |
| 1 | 2021-01-05 | 1 |
| 1 | 2021-01-17 | 1 |
| 1 | 2021-02-01 | 1 |
| 1 | 2021-02-18 | 2 |
| 1 | 2021-02-28 | 2 |
| 1 | 2021-03-30 | 3 |
| 2 | 2021-01-01 | 4 |
| 2 | 2021-01-14 | 4 |
| 2 | 2021-02-15 | 5 |
我也可以在 R 中使用 data.table 来完成(取决于效率/性能)
【问题讨论】:
-
Event_ID应该在有序数据帧上创建,对吧?所以如果数据没有排序,你想在创建Event_ID之前先排序? -
不,事件的顺序无关紧要。我想数据必须以某种方式排序,以便正确创建 Event_ID,但这不是结果的先决条件
标签: sql r oracle sliding-window