Результаты Oracle Query to Force с 2-летним фильтром по умолчанию - PullRequest
0 голосов
/ 04 марта 2019

экспертов, я хочу, чтобы мои реулты использовались с 2-летним фильтром по умолчанию, независимо от того, выбирает ли пользователь этот диапазон дат или нет

ниже - мой подход.Есть ли лучший (оптимальный) способ написать это

WITH forcedate as (
Select *
  From emp r
Where
   r.empdate >= to_date(20171019, 'YYYYMMDD')
  And r.empdate <= to_date(20181027, 'YYYYMMDD')
    )
  Select * From forcedate t
  where
  t.empid = 187
--below is the OPTIONAL bind variable for user input
AND t.empdate >= to_date(20171119, 'YYYYMMDD')
  And t.empdate <= to_date(20181227, 'YYYYMMDD');

1 Ответ

0 голосов
/ 04 марта 2019

Вам не нужно дважды фильтровать данные, используйте функции greatest() и least():

with dates as (select date '2017-10-19' d1, date '2018-12-27' d2 from dual)
select * 
  from emp
  join dates on empdate between greatest(d1, nvl(:input_1, d1)) and least(d2, nvl(:input_2, d2))
  where empid = 187
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...