Фильтрация данных на основе эффективных и срочных данных - PullRequest
0 голосов
/ 29 мая 2020

У меня запрос содержит дату начала и дату окончания, я бы хотел отфильтровать данные по двум датам. Мне нужны только данные за 2019 год и выше, основанные на дате начала или окончания, если вы можете посмотреть примеры. Мне нужен ID 1,2,3,6,7 и 4,5 не требуется. Мы можем сделать это на основе года извлечения как для даты начала, так и для даты окончания. но ищу лучший подход Спасибо!

CREATE TABLE TEMP
(
ID INT,
SDate DATE,
EDate DATE
)

INSERT INTO TEMP
SELECT 1,'01/01/2014', '01/01/2019' FROM DUAL
UNION ALL
SELECT 2,'01/01/2015', '01/01/2020' FROM DUAL
UNION ALL
SELECT 3,'01/01/2019', '12/31/2019' FROM DUAL
UNION ALL
SELECT 4,'01/01/2012', '12/31/2018' FROM DUAL
UNION ALL
SELECT 5,'01/01/2010', '10/01/2016' FROM DUAL
 UNION ALL
SELECT 6,'06/01/2020', '10/01/2020' FROM DUAL
UNION ALL
SELECT 7,'01/01/2021', '03/01/2021' FROM DUAL

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вы можете просто использовать условие для edate следующим образом:

select * from emp
where edate >= date '2019-01-01';

Это будет использовать индекс для edate, если он есть.

0 голосов
/ 29 мая 2020

Что-то вроде этого? Звучит как то, что вы сказали, но - вы не писали, как вы это делаете сейчас. Если это не «оно», то какой «лучший» подход вам нужен и почему? Я имею ввиду, что в этом плохого?

SQL> select *
  2  from temp
  3  where extract(year from sdate) >= 2019
  4     or extract(year from edate) >= 2019;

        ID SDATE      EDATE
---------- ---------- ----------
         1 01/01/2014 01/01/2019
         2 01/01/2015 01/01/2020
         3 01/01/2019 12/31/2019
         6 06/01/2020 10/01/2020
         7 01/01/2021 03/01/2021

SQL>
...