#sql #apache-spark #apache-spark-sql
Вопрос:
У меня есть таблица, например:
Стол log
:
userId | action | time |
---------------------------------------|
1 | 1 | 2020-11-27 05:48:02|
---------------------------------------|
1 | 2 | 2020-11-27 05:49:02|
---------------------------------------|
1 | 3 | 2020-11-27 05:50:02|
---------------------------------------|
1 | 1 | 2020-11-27 06:49:02|
---------------------------------------|
1 | 2 | 2020-11-27 06:50:02|
---------------------------------------|
1 | 3 | 2020-11-27 05:51:02|
---------------------------------------|
2 | 1 | 2020-11-27 05:49:02|
---------------------------------------|
2 | 2 | 2020-11-27 05:50:02|
---------------------------------------|
2 | 3 | 2020-11-27 05:51:02|
---------------------------------------
действие 1
— отмечает, что сеанс запущен
действие 3
— отмечает, что сеанс завершен
Как я могу добавить столбец и установить идентификатор сеанса для каждого сеанса? Целевая таблица должна иметь такое представление:
userId | action | time | sessionId |
---------------------------------------------------|
1 | 1 | 2020-11-27 05:48:02| SessionId1|
---------------------------------------------------|
1 | 2 | 2020-11-27 05:49:02| SessionId1|
---------------------------------------------------|
1 | 3 | 2020-11-27 05:50:02| SessionId1|
---------------------------------------------------|
1 | 1 | 2020-11-27 06:49:02| SessionId2|
---------------------------------------------------|
1 | 2 | 2020-11-27 06:50:02| SessionId2|
---------------------------------------------------|
1 | 3 | 2020-11-27 05:51:02| SessionId2|
---------------------------------------------------|
2 | 1 | 2020-11-27 05:49:02| SessionId3|
---------------------------------------------------|
2 | 2 | 2020-11-27 05:50:02| SessionId3|
---------------------------------------------------|
2 | 3 | 2020-11-27 05:51:02| SessionId3|
---------------------------------------------------
Комментарии:
1. Я удалил конфликтующие теги здесь; пожалуйста, используйте только теги, связанные с вопросом и технологией, которую вы используете. Вам нужно будет перенастроить свои УОКР.
2. Извините за это @Larnu
Ответ №1:
Вы можете просто сделать совокупную сумму «1», я думаю:
select t.*,
sum(case when action = 1 then 1 else 0 end) over (order by userid,time) as sessionid
from t