Sql 在Impala中,如何填充一列以将一组行与组中的其他行区分开来?

Sql 在Impala中,如何填充一列以将一组行与组中的其他行区分开来?,sql,impala,hue,Sql,Impala,Hue,我有黑斑羚的下表 |LogTime|ClientId|IsNewSession| |1 |123 |1 | |2 |123 | | |3 |123 | | |3 |666 |1 | |4 |666 | | |10 |123 |1 | |23 |666

我有黑斑羚的下表

|LogTime|ClientId|IsNewSession|
|1      |123     |1           |
|2      |123     |            |
|3      |123     |            |
|3      |666     |1           |
|4      |666     |            |
|10     |123     |1           |
|23     |666     |1           |
|24     |666     |            |
|25     |444     |1           |
|26     |444     |            |
我想制作一个新表,如下所示:

|LogTime|ClientId|IsNewSession|SessionId|
|1      |123     |1           |1        |
|2      |123     |            |1        |
|3      |123     |            |1        |
|3      |666     |1           |1        |
|4      |666     |            |1        |
|10     |123     |1           |2        |
|23     |666     |1           |2        |
|24     |666     |            |2        |
|25     |444     |1           |1        |
|26     |444     |            |1        |
基本上,我想让
SessionId
列在每组行中都有一个唯一的会话ID,直到
IsNewSession
列在group by
ClientId
之后有一个值
1
,以区分每个
ClientId
的不同会话

我已经创建了
IsNewSession
列来执行此操作,但不确定如何迭代行以创建
SessionId


任何帮助都将不胜感激

您可以使用累计总和:

select t.*,
       sum(isnewsession) over (partition by clientid order by logtime) as sessionid
from t;

哇,我不知道这件事!谢谢你明确的回答!:)