У меня есть таблица, подобная приведенной ниже, в Hive
.
Я хочу вычислить разницу во времени в seconds
для столбцов, где id
совпадает, и получить значение в столбце time_diff
.
Table
+-----+---------+------------------------+
| id | event | eventdate |
+-----+---------+------------------------+
| 1 | sent | 2017-11-23 03:49:50.0 |
| 1 | sent | 2017-11-23 03:49:59.0 |
| 2 | sent | 2017-11-23 04:49:59.0 |
| 1 | click | 2017-11-24 03:49:50.0 |
+-----+---------+------------------------+
Я сделал, как показано ниже
SELECT *, coalesce(unix_timestamp(eventdate) - unix_timestamp(LAG(eventdate) OVER(PARTITION BY ID ORDER BY eventdate)),0) time_diff FROM Table;
Result
+-----+---------+------------------------+-----------+
| id | event | eventdate |time_diff |
+-----+---------+------------------------+-----------+
| 1 | sent | 2017-11-23 03:49:50.0 | 0 |
| 1 | sent | 2017-11-23 03:49:59.0 | 9 |
| 2 | sent | 2017-11-23 04:49:59.0 | 0 |
| 1 | click | 2017-11-24 03:49:50.0 | 86391 |
+-----+---------+------------------------+-----------+
Я получаю то, что хочуно с небольшим исключением.В результате, когда id
равно 1
, а event
равно sent
, в столбце time_diff
есть два значения 0
и 9
.Я хочу, чтобы все события sent
имели 0
в столбце time_diff
после того, как мы применили функцию задержки.
Expected result
:
+-----+---------+------------------------+-----------+
| id | event | eventdate |time_diff |
+-----+---------+------------------------+-----------+
| 1 | sent | 2017-11-23 03:49:50.0 | 0 |
| 1 | sent | 2017-11-23 03:49:59.0 | 0 |
| 2 | sent | 2017-11-23 04:49:59.0 | 0 |
| 1 | click | 2017-11-24 03:49:50.0 | 86391 |
+-----+---------+------------------------+-----------+
Как получить ожидаемый результат?