У меня проблемы с фильтрацией указанного набора данных c из таблицы базы данных (я использую базу данных Oracle). Вот моя таблица (столбец MAX_END_DATE был рассчитан с помощью вспомогательного оператора):
ID | Quarter | BEGINN_DATE | END_DATE | MAX_END_DATE
------------------------------------------------------------------------------------------
21 | 01.01.2019 | 09.01.2019 | NULL | 09.01.2019
------------------------------------------------------------------------------------------
22 | 01.01.2019 | 03.01.2019 | 09.01.2019 | 09.01.2019
------------------------------------------------------------------------------------------
23 | 01.01.2019 | 02.01.2019 | 03.01.2019 | 09.01.2019
Если значение NULL существует в столбце END_DATE, который я хочу получить этот кортеж Но если в этом столбце нет значения NULL , я хочу получить кортеж, который включает MAX_DATE в столбце END_DATE. Чтобы решить эту проблему, я написал следующее предложение Where:
SELECT *
FROM myTable
WHERE end_date IS NULL
OR(
end_date IS NOT NULL AND
end_date = max_end_datum
);
С помощью этого предложения WHERE я получаю следующий результат:
ID | Quarter | BEGINN_DATE | END_DATE | MAX_END_DATE
------------------------------------------------------------------------------------------
21 | 01.01.2019 | 09.01.2019 | NULL | 09.01.2019
------------------------------------------------------------------------------------------
22 | 01.01.2019 | 03.01.2019 | 09.01.2019 | 09.01.2019
------------------------------------------------------------------------------------------
Как я должен преобразовать предложение WHERE, чтобы получить кортеж со значением NULL, когда это значение существует в столбце END_DATE?
Я хочу получить только этот результат, если в столбце END_DATE существует значение Null:
ID | Quarter | BEGINN_DATE | END_DATE | MAX_END_DATE
------------------------------------------------------------------------------------------
21 | 01.01.2019 | 09.01.2019 | NULL | 09.01.2019 -----------------------------------------------------------------------------
Я хочу получить только этот результат Если в столбце END_DATE нет нулевого значения:
ID | Quarter | BEGINN_DATE | END_DATE | MAX_END_DATE
------------------------------------------------------------------------------------------
22 | 01.01.2019 | 03.01.2019 | 09.01.2019 | 09.01.2019
------------------------------------------------------------------------------------------
Я не хочу получать оба результата одновременно. Я хочу получить первый результат ИЛИ второй результат.
Спасибо за помощь!
// РЕДАКТИРОВАТЬ:
Я забыл упомянуть, что значения в четверти столбца могут быть переменной и не должно быть первым днем любого квартала:
ID | Quarter | BEGINN_DATE | END_DATE | MAX_END_DATE
21 | 01.01.2019 | 01.01.2019 | 20.02.2019 | 21.02.2019
------------------------------------------------------------------------------------------
22 | 21.02.2019 | 21.02.2019 | 21.02.2019 | 21.01.2019
------------------------------------------------------------------------------------------
23 | 21.02.2019 | 22.02.2019 | NULL | 21.01.2019