PostgreSQL добавление указанного значения c в отсутствующие ячейки после функции отставания - PullRequest
1 голос
/ 21 января 2020

Если я выполню запрос:

SELECT status,
       created_at,
       lead(created_at) over(partition BY id
                             ORDER BY updated_at) ended_at
FROM salesdb.orders

, я получу следующий результат:

| status    | created_at          | ended_at            |
| Opened    | 2019-11-12 11:46:11 | 2019-11-15 12:04:13 |
| Pending   | 2019-11-15 12:04:13 | 2019-11-19 23:03:24 |
| Completed | 2019-11-19 23:03:24 |                     |
| Opened    | 2019-11-14 11:46:11 | 2019-11-17 12:04:13 |
| Pending   | 2019-11-17 12:04:13 | 2019-11-20 23:03:24 |
| Completed | 2019-11-20 23:03:24 |                     |

Я хотел бы вставить указанную дату окончания c в отсутствующие ячейки как '2019-12-31'

Вот так:

| status    | created_at          | ended_at            |
| Opened    | 2019-11-12 11:46:11 | 2019-11-15 12:04:13 |
| Pending   | 2019-11-15 12:04:13 | 2019-11-19 23:03:24 |
| Completed | 2019-11-19 23:03:24 | 2019-12-31 00:00:00 |
| Opened    | 2019-11-14 11:46:11 | 2019-11-17 12:04:13 |
| Pending   | 2019-11-17 12:04:13 | 2019-11-20 23:03:24 |
| Completed | 2019-11-20 23:03:24 | 2019-12-31 00:00:00 |

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вы также можете использовать coalesce:

select status,
       created_at,
       coalesce(
           lead(created_at) over(partition by id order by updated_at), 
           '2019-12-31') ended_at
from salesdb.orders
0 голосов
/ 21 января 2020

Используйте форму с тремя аргументами lead():

SELECT status,
       created_at,
       lead(created_at, 1, '2019-12-31') over (partition BY id
                                               order by updated_at
                                              ) as ended_at
FROM salesdb.orders
...