【发布时间】:2022-01-17 09:34:05
【问题描述】:
例如,我有一个如下数据集:
| time | action |
|---|---|
| 03:00:00 | block |
| 04:00:00 | unblock |
| 05:00:00 | block |
| 06:00:00 | unblock |
| 07:00:00 | unblock |
| 08:00:00 | block |
现在对于每一行,我想在当前行的时间之前获得action 列等于“阻塞”的最后时间。例如,对于time等于“07:00:00”且action等于“unblock”的第五行,它之前的最后一次action等于“block”应该是第三行,预计时间为“05:00:00”。
我的最终预期结果是:
| time | action | last_time |
|---|---|---|
| 03:00:00 | block | 03:00:00 |
| 04:00:00 | unblock | 03:00:00 |
| 05:00:00 | block | 05:00:00 |
| 06:00:00 | unblock | 05:00:00 |
| 07:00:00 | unblock | 05:00:00 |
| 08:00:00 | block | 08:00:00 |
如何使用窗口函数不自行加入得到上述结果?
(p.s.如果不能达到上面的结果,下面的输出也是可以的:
| time | action | last_time |
|---|---|---|
| 03:00:00 | block | NULL |
| 04:00:00 | unblock | 03:00:00 |
| 05:00:00 | block | 03:00:00 |
| 06:00:00 | unblock | 05:00:00 |
| 07:00:00 | unblock | 05:00:00 |
| 08:00:00 | block | 05:00:00 |
【问题讨论】:
标签: sql window-functions impala trino