Как написать SQL запрос с условием разницы дат не более некоторого количества месяцев?
Есть таблица с двумя полями дат, одна из них часто не определена и я использовал nvl.
Проблема возникла с условием разницы дат, не более некоторого количества месяцев.
Я накидал, что-то вроде этого:
SELECT
NVL(table.change_date, table.start_date) real_date
, MONTHS_BETWEEN(TRUNC(CURRENT_DATE, 'MONTH'), TRUNC(real_date, 'MONTH')) razn
FROM table
WHERE (MONTHS_BETWEEN(
TRUNC(CURRENT_DATE, 'MONTH'),
TRUNC(NVL(table.dpm_change_date, table.dpm_start_date))) < 15
Подскажите, где и как правильно прописать?
Ответы (2 шт):
в select-листе нельзя использовать алиасы полей, определённые в этом же листе.
замените
TRUNC(real_date, 'MONTH'))
на
TRUNC(NVL(table.change_date,table.start_date),'MONTH')
а также приведите в соответствие открывающие и закрывающие скобки в кляузе WHERE, и, если вы не ошиблись с именами полей в WHERE, у вас всё получится.
Для записей за 2020 год:
create table t (id, created, modified) as
select rownum, add_months (date'2020-01-01', rownum-1), cast (null as date)
from dual connect by level<=12
Ожидаю, что для условия - не более 15 месяцев с 01.12.2021, получу записи с октября по декабрь:
select t.id, coalesce (modified, created) lastchanged
from t
where months_between (date'2021-12-01', coalesce (modified, created)) < 15
Так и есть (на db<>fiddle):
ID LASTCHANGED
---------- -------------------
10 2020-10-01 00:00:00
11 2020-11-01 00:00:00
12 2020-12-01 00:00:00