Сортировка PostgreSQL по старейшей из двух дат? - PullRequest
0 голосов
/ 11 января 2019

Мне нужно отсортировать таблицу postgres по «более позднему столбцу A, откат к столбцу B»

Если мой стол выглядит так: id, reminder_at, updated_at

1, 01-11-2019, 12-01-2018
2, null,       01-04-2019
3, null,       01-02-2019
4, 01-01-2019, 01-04-2019

ожидаемый результат сортировки будет

4, 01-01-2019, 01-04-2019 # 01-01-2019 is soonest 
3, null,       01-02-2019 # then 01-02-2019
2, null,       01-04-2019 # then 01-04-2019
1, 01-11-2019, 12-01-2018 # then 01-11-2019

В настоящее время я делаю это с кодом приложения, и я бы предпочел сделать это в SQL

Например, если Remder_at пошел в NULL для записи 1, то он сразу же перешел бы к вершине, потому что updated_at дата является самой старой

В настоящее время:

SELECT * 
FROM "tasks" 
WHERE completed_at IS NULL
ORDER by reminder_at, updated_at

РЕДАКТИРОВАТЬ с правильным ответом:

SELECT * 
FROM "tasks" 
WHERE completed_at IS NULL
ORDER by COALESCE(reminder_at, updated_at)

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Я интерпретирую ваш формат данных как mm-dd. Должны ли 3 и 2 быть перевернуты в вашем выводе, второе после четвертого?

Работает ли следующее?

выберите идентификатор, напоминание, обновленный_кат, наибольший (coalesce (Remder_at, '1/1/1900'), coalesce (updated_at, '1/1/1900')) в качестве столбца теста по порядку испытаний по величине (coalesce (Remder_at, '1/1/1900'), коалесценции (updated_at, '1/1/1900-));

0 голосов
/ 11 января 2019

использовать коалесц Он выбирает первое ненулевое значение.

 select * from tab
 order by coalesce(col1, col2)

если вместо этого вы хотите использовать большее из двух дат .., тогда используйте great ()

 select * from tab
 order by greatest(col1, col2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...