Пытаясь понять, как я могу это сделать:
|id| timestamp | type |
|--|--------------------------|---------|
|11|2018-10-02 15:57:07.000000| open |
|11|2018-10-02 16:48:51.000000| closed |
|11|2018-10-05 08:59:27.000000| open |
|11|2018-10-05 09:59:18.000000| closed |
, что:
|id| open_ts | closed_ts |
|--|--------------------------|--------------------------|
|11|2018-10-02 15:57:07.000000|2018-10-02 16:48:51.000000|
|11|2018-10-05 08:59:27.000000|2018-10-05 09:59:18.000000|
Я сделал "самостоятельное соединение" с условием типа.
Здесь есть одно правило: после «открытия» всегда должно быть «закрыто». Он не может быть «открытым», пока не был «закрыт».
Мой лучший результат:
|id| open_ts | closed_ts |
|--|--------------------------|--------------------------|
|11|2018-10-02 15:57:07.000000|2018-10-02 16:48:51.000000|
|11|2018-10-02 15:57:07.000000|2018-10-05 09:59:18.000000|
|11|2018-10-05 08:59:27.000000|2018-10-02 16:48:51.000000|
|11|2018-10-05 08:59:27.000000|2018-10-05 09:59:18.000000|
select z.id id, z.timestamp open_ts, o.timestamp closed_ts
from temp_event z
join temp_event o
on z.id=o.id
where z.type='open' and o.type='closed'
Кроме того, я пытался использовать разные on (id) *, но получил неверное значение интервала:
|id| open_ts | closed_ts |
|--|--------------------------|--------------------------|
|11|2018-10-02 15:57:07.000000|2018-10-02 16:48:51.000000|
|11|2018-10-05 08:59:27.000000|2018-10-02 16:48:51.000000|
* из дополнительной таблицы. Этот идентификатор существует в двух экземплярах для одного идентификатора в представленной таблице.