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