Я пытаюсь получить самую последнюю дату начала события, прежде чем оно произойдет снова.
У меня есть данные:
+-----+------------------+--------+--------+--+
| ID | DATE | REGION | STATUS | |
+-----+------------------+--------+--------+--+
| 200 | 2020-04-10 6:00 | USA | START | |
| 200 | 2020-04-10 7:00 | USA | ACTIVE | |
| 200 | 2020-04-10 13:00 | USA | STOP | |
| 200 | 2020-04-10 15:00 | USA | START | |
| 200 | 2020-04-10 16:00 | USA | ACTIVE | |
| 200 | 2020-04-10 19:00 | USA | ACTIVE | |
| 200 | 2020-04-10 20:00 | USA | STOP | |
+-----+------------------+--------+--------+--+
Что я хочу сделать:
+-----+------------------+--------+--------+------------------+
| ID | DATE | REGION | STATUS | LAST_START_DATE |
+-----+------------------+--------+--------+------------------+
| 200 | 2020-04-10 6:00 | USA | START | 2020-04-10 6:00 |
| 200 | 2020-04-10 7:00 | USA | ACTIVE | 2020-04-10 6:00 |
| 200 | 2020-04-10 13:00 | USA | STOP | 2020-04-10 6:00 |
| 200 | 2020-04-10 15:00 | USA | START | 2020-04-10 15:00 |
| 200 | 2020-04-10 16:00 | USA | ACTIVE | 2020-04-10 15:00 |
| 200 | 2020-04-10 20:00 | USA | STOP | 2020-04-10 15:00 |
| 200 | 2020-04-10 20:00 | USA | STOP | 2020-04-10 15:00 |
+-----+------------------+--------+--------+------------------+
Я хочу создать еще один столбец с самым поздним временем запуска и записать его, затем обновлять его всякий раз, когда это происходит, и сохранять это значение там до тех пор, пока снова не появится старт.
Что я пытался:
SELECT id, date, region, status, last_start_date
FROM (SELECT t1.*,
MAX(CASE WHEN status = 'START' THEN date END) OVER (PARTITION BY id,region) as last_start_date
FROM table1 t1
) t1
GROUP BY id,region,status
Это не сработало, поскольку MAX возвращает только отображаемую последнюю версию, а это не то, что я пытался сделать:
+-----+------------------+--------+--------+------------------+
| ID | DATE | REGION | STATUS | LAST_START_DATE |
+-----+------------------+--------+--------+------------------+
| 200 | 2020-04-10 6:00 | USA | START | 2020-04-10 15:00 |
| 200 | 2020-04-10 7:00 | USA | ACTIVE | 2020-04-10 15:00 |
| 200 | 2020-04-10 13:00 | USA | STOP | 2020-04-10 15:00 |
| 200 | 2020-04-10 15:00 | USA | START | 2020-04-10 15:00 |
| 200 | 2020-04-10 16:00 | USA | ACTIVE | 2020-04-10 15:00 |
| 200 | 2020-04-10 20:00 | USA | STOP | 2020-04-10 15:00 |
+-----+------------------+--------+--------+------------------+
Каков был бы правильный подход для достижения этой цели? моя цель?