Имеется селект, который вытаскивает запись базируюсь на масимальном значения 1-го полня
SELECT *
FROM
(
SELECT discount, osp_id, sero_id, estpt_id,
ROW_NUMBER() OVER
(PARTITION BY osp_id, sero_id, estpt_id ORDER BY festpae_id DESC) as festpae_id
FROM database1 data1
JOIN database2 data2 ON data2.id = data1.attr_id
WHERE data1.interest_rate = 1
AND data1.ordet_id = data2.id
AND data1.objt_attr_id = data2.objt_attr_id
)
WHERE festpae_id = 1
Список запией:
DISCOUNT OSP_ID SERO_ID ESTPT_ID FESTPAE_ID VALUE
---------- ---------- ---------- ---------- ---------- ----------
50 619356 3931831 2144 NULL 0
40 619356 3931831 2144 NULL 1
30 619356 3931831 2144 2000743 0
15 619356 3931831 2144 2000744 1
Выполняя селект, я получу вот это
DISCOUNT OSP_ID SERO_ID ESTPT_ID FESTPAE_ID VALUE
---------- ---------- ---------- ---------- ---------- ----------
50 619356 3931831 2144 NULL 0
Мои знания не велики, по этому обращаюсь к Вам.
Мне нужно принять во внимания ещё некоторые поля
- Если существуют записи где `festpae_id is NULL`, тогда нужна проверка на `festpae_id is NULL` and `value = 1`, соответсвенно он должен вернуть запись где discount 40( в данном случае)
- Если не существует записей где `festpae_id is null`, тогда он должен смотреть на макисмальное `(festpae_id)` (iв данном случае использую ROW_NUMBER() ) и `value = 1`.
- Во всех других случаях он должен возвращать пустоту.
Знаю что можно использовать DECODE(), но тогда это всё превращается в ужас. Может ли кто-то помочь? Уже думаю над этим более 5 часов и никак...
P.S Этот селект испольуезстя в таблице view как `LEFT OUTER JOIN`.