【发布时间】:2020-09-04 18:10:57
【问题描述】:
我有带有 id、timestamp(ts) event、capital_event_bool 和 prev_event_capital_bool 的数据。
id ts event capital_event_bool prev_event_capital_bool
001 00:01 a 0 0
002 00:02 b 0 0
002 00:03 b 0 0
002 00:04 b 1 0
002 00:05 c 0 1
003 00:03 c 0 0
003 00:04 b 0 0
003 00:05 b 1 0
003 00:06 b 0 1
003 00:07 b 0 0
003 00:08 b 1 0
只有“b”事件可以有一个 capital_event_bool = True。 我想要完成的是有一种方法来计算所有capital_event_bool = False b 事件之前每个capital_event_bool = 每个id 的True 事件。我原本以为我可以通过 Redshift 中的 row_number() 窗口函数来实现这一点
ROW_NUMBER() OVER (PARTITION BY id, event, capital_event_bool ORDER BY ts) AS row_num
但让我感到困惑的部分是如何在每个 capital_event_bool = True 事件后重新开始计数。如果行编号将在每个 capital_event_bool = True 事件处停止然后重新开始,那很好,因为我可以使用带有 capital_event_bool 的 case 语句来达到我的最终结果。
row_num DESIRED only row_num Final Desired Result
1 1 0
1 1 0
2 2 0
1 3 2
1 1 0
2 2 0
1 1 0
1 2 1
2 1 0
3 2 0
2 3 2
【问题讨论】:
标签: sql amazon-redshift