Как нумеровать сгруппированные строки - PullRequest
0 голосов
/ 20 июня 2019

Существует таблица, в которой хранятся следующие данные журнала просмотра видео.

|user_id| status |     time         |
-------------------------------------
|user_a |start   |2019-06-18 00:00:00|
|user_a |progress|2019-06-18 00:00:05|
|user_a |progress|2019-06-18 00:00:10|
|user_a |complete|2019-06-18 00:00:15|
|user_a |start   |2019-06-18 00:10:00|
|user_a |complete|2019-06-18 00:10:05|
|user_a |start   |2019-06-19 00:10:00|
|user_a |start   |2019-06-19 00:10:05|
|user_a |progress|2019-06-19 00:10:10|
|user_b |start   |2019-06-18 00:20:00|
|user_b |progress|2019-06-18 00:20:05|
|user_b |progress|2019-06-18 00:20:10|

Я хочу присвоить одинаковые номера строкам от статуса 'start' до 'start' для каждого user_id, как показано ниже.

id|user_id| status |     time         |
-------------------------------------
 1|user_a |start   |2019-06-18 00:00:00|
 1|user_a |progress|2019-06-18 00:00:05|
 1|user_a |progress|2019-06-18 00:00:10|
 1|user_a |complete|2019-06-18 00:00:15|
 2|user_a |start   |2019-06-18 00:10:00|
 2|user_a |complete|2019-06-18 00:10:05|
 3|user_a |start   |2019-06-19 00:10:00|
 4|user_a |start   |2019-06-19 00:10:05|
 4|user_a |progress|2019-06-19 00:10:10|
 1|user_b |start   |2019-06-18 00:20:00|
 1|user_b |progress|2019-06-18 00:20:05|
 1|user_b |progress|2019-06-18 00:20:10|

Есть ли способ объединиться с sql? Я использую Presto.

1 Ответ

1 голос
/ 20 июня 2019

Используйте накопленную сумму:

select t.*, 
       sum(case when status = 'start' then 1 else 0 end) over (partition by user_id order by time) as id
from t;

Демо

...