dense_rank 在布尔列上
dense_rank over boolean column
美好的一天。我有一个带条件的排列 table,我是 运行 redshift DB。这是一个带有事件日志的 table,我将其分为会话开始 (bool = 1) 和会话继续 (bool = 0),如下所示:
=======================
| ID | BOOL |
=======================
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |
| 10 | 0 |
| 11 | 1 |
| 12 | 0 |
| 13 | 0 |
| 14 | 1 |
| 15 | 0 |
| 16 | 0 |
=======================
我需要用 dense_rank:
创建 sesssion_id 列
================================
| ID | BOOL | D_RANK |
================================
| 1 | 0 | 1 |
| 2 | 1 | 2 |
| 3 | 0 | 2 |
| 4 | 0 | 2 |
| 5 | 0 | 2 |
| 6 | 0 | 2 |
| 7 | 0 | 2 |
| 8 | 0 | 2 |
| 9 | 0 | 2 |
| 10 | 0 | 2 |
| 11 | 1 | 3 |
| 12 | 0 | 3 |
| 13 | 0 | 3 |
| 14 | 1 | 4 |
| 15 | 0 | 4 |
| 16 | 0 | 4 |
================================
有没有办法做到这一点?非常感谢任何帮助。
使用累计和。假设 bool
是新会话的开始:
select t.*,
sum(bool) over (order by id) as session_id
from t;
注意:这将从 0
开始。如果需要,可以添加1
。
美好的一天。我有一个带条件的排列 table,我是 运行 redshift DB。这是一个带有事件日志的 table,我将其分为会话开始 (bool = 1) 和会话继续 (bool = 0),如下所示:
=======================
| ID | BOOL |
=======================
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 0 |
| 10 | 0 |
| 11 | 1 |
| 12 | 0 |
| 13 | 0 |
| 14 | 1 |
| 15 | 0 |
| 16 | 0 |
=======================
我需要用 dense_rank:
创建 sesssion_id 列================================
| ID | BOOL | D_RANK |
================================
| 1 | 0 | 1 |
| 2 | 1 | 2 |
| 3 | 0 | 2 |
| 4 | 0 | 2 |
| 5 | 0 | 2 |
| 6 | 0 | 2 |
| 7 | 0 | 2 |
| 8 | 0 | 2 |
| 9 | 0 | 2 |
| 10 | 0 | 2 |
| 11 | 1 | 3 |
| 12 | 0 | 3 |
| 13 | 0 | 3 |
| 14 | 1 | 4 |
| 15 | 0 | 4 |
| 16 | 0 | 4 |
================================
有没有办法做到这一点?非常感谢任何帮助。
使用累计和。假设 bool
是新会话的开始:
select t.*,
sum(bool) over (order by id) as session_id
from t;
注意:这将从 0
开始。如果需要,可以添加1
。