Self Присоединиться к таблице с помощью подзапроса - в предложении SELECT (Spark SQL) - PullRequest
0 голосов
/ 12 июня 2019

У меня есть некоторые данные, которые отформатированы следующим образом.

Столбцы ID и DATE являются первичным ключом таблицы.В активном столбце указывается, принимал участие пользователь в задании или нет.

Моя цель - найти для каждого пользователя последнюю дату, когда он был активен, ПОСЛЕ даты текущей строки.

Итак, я решил самостоятельно присоединиться к столу.Проблема - я использую SPARK SQL и не могу использовать подзапрос в предложении select, который содержит знак < или >.

Моя мысль была:

SELECT MAX(ACTIVE) from table t1, t2 where t1.ID =  t2.ID and t1.Date>t2.Date

Однако это невозможно.

Как я могу сделать это иначе?

    +----+----------+--------+-------------+
| ID | DATE     | ACTIVE | LAST_ACTIVE |
+----+----------+--------+-------------+
|    |          |        |             |
| 1  | 06/12/19 | 0      |             |
+----+----------+--------+-------------+
| 1  | 06/13/19 | 1      |             |
+----+----------+--------+-------------+
| 1  | 06/14/19 | 0      |             |
+----+----------+--------+-------------+
| 2  | 06/12/19 | 0      |             |
+----+----------+--------+-------------+
| 2  | 06/13/19 | 1      |             |
+----+----------+--------+-------------+
| 3  | 06/12/19 | 1      |             |
+----+----------+--------+-------------+
| 3  | 06/13/19 | 0      |             |
+----+----------+--------+-------------+

1 Ответ

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

Последняя дата, когда что-то было активным после данной даты. , , используйте оконную функцию:

select t.*,
       max(case when active = 1 then date end) over (partition by id order by date)
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...