Saya memiliki tabel berikut di Impala.

|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     |            |

Saya ingin membuat tabel baru sebagai berikut:

|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        |

Pada dasarnya, saya ingin membuat kolom SessionId yang memiliki ID sesi unik per set baris hingga ada nilai 1 di kolom IsNewSession setelah grup dengan ClientId, untuk membedakan sesi yang berbeda per ClientId.

Saya telah membuat kolom IsNewSession untuk melakukannya, tetapi tidak yakin bagaimana cara mengulangi baris untuk membuat kolom SessionId.

Bantuan apa pun akan sangat dihargai!

1
user3415167 19 November 2020, 21:05

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan jumlah kumulatif:

select t.*,
       sum(isnewsession) over (partition by clientid order by logtime) as sessionid
from t;
1
Gordon Linoff 19 November 2020, 18:06