Я использую PostgreSQL
10.6 и хочу прочитать таблицу с массивом дат. Моя цель состоит в том, чтобы классифицировать каждую дату в этом массиве и сравнивать ее с датой дня, чтобы отразить их в категории: прошлое, настоящее, будущее.
С учетом случая я уже классифицировал записи в зависимости от их значения и, с другой стороны, я могу удалить элементы из этого массива. Но когда я пытаюсь использовать оператор case в нестандартных элементах, ответ не тот, который я ожидаю.
myTable
id(integer) | dates(date[])
---------------------------
1 | {2020-03-17}
2 | {2020-03-17,2020-03-16}
3 | {2020-03-16,2020-03-15}
4 | {2020-03-17,2020-03-18}
5 | {2020-03-16,2020-03-18}
Простой запрос возвращает мне каждую дату в отдельной строке
SELECT id, UNNEST(dates) FROM myTable
Другой запрос возвращает мне не очень хороший результат, потому что некоторые даты в прошлом отображаются, например, «Futur».
SELECT
id,
UNNEST(dates),
CASE
WHEN dates < ARRAY[now()::date] THEN 'Past'
WHEN dates = ARRAY[now()::date] THEN 'Present'
WHEN dates > ARRAY[now()::date] THEN 'Futur'
END AS myResult
FROM myTable
ORDER BY UNNEST(dates) DESC
Как Могу ли я добиться этого результата? Я думаю, что упускаю что-то важное.
id | dates | myResult
--------------------------------
4 | {2020-03-18} | Futur
5 | {2020-03-18} | Futur
1 | {2020-03-17} | Present
2 | {2020-03-17} | Present
4 | {2020-03-17} | Present
2 | {2020-03-16} | Past
3 | {2020-03-16} | Past
5 | {2020-03-16} | Past
3 | {2020-03-15} | Past