Создание таблицы!
DROP TABLE mytable;
CREATE TABLE mytable
(
product_code VARCHAR2(20 BYTE) NOT NULL ENABLE,
priority NUMBER NOT NULL ENABLE,
date_act DATE,
date_dis DATE
);
заполнение таблицы
INSERT INTO mytable (product_code, priority, date_act, date_dis) VALUES ('bla', '0', TO_DATE('2019-01-01', 'YYYY-MM-DD'), TO_DATE('2019-01-31', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_act, date_dis) VALUES ('bla', '1', TO_DATE('2019-02-01', 'YYYY-MM-DD'), TO_DATE('2019-02-28', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_act) VALUES ('bla', '2', TO_DATE('2019-01-01', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_act) VALUES ('bla', '3', TO_DATE('2019-02-01', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_dis) VALUES ('bla', '4', TO_DATE('2019-01-31', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority, date_dis) VALUES ('bla', '5', TO_DATE('2019-02-28', 'YYYY-MM-DD'));
INSERT INTO mytable (product_code, priority) VALUES ('bla', '6');
INSERT INTO mytable (product_code, priority) VALUES ('bla', '7');
Теперь мне нужно только одна строка , использующая два входных параметра (или переменные) product_code
и date_submit
,
Я использую соединители ИЛИ, но я не могу определить некоторое условие Вес (на самом деле не входит в mytable
), в соответствии со значениями date_act
и date_dis
.
Если condition_weight 4 равен true
, то левые (3
, 2
и 1
) будут игнорироваться.
Если условие_вес 4 равно false
и условие_вес 3 равно true
, условие_вес 2 и условие_вес 1 будет игнорироваться.
Если condition_weight 4 и 3 равны false
и condition_weight 2 равен true
condition_weight 1 игнорироваться.
Если condition_weight 4, 3 и 2 равны false
aonly condition_weight 1 , то будут оцениваться.
Ожидаемые результаты .. .
SELECT * FROM mytable
WHERE product_code = :product_code
AND (
TO_DATE (:date_submit, 'yyyy/mm/dd') BETWEEN date_act AND date_dis --condition_weight 4
OR (TO_DATE (:date_submit, 'yyyy/mm/dd') <= date_dis AND date_act IS NULL) --condition_weight 3
OR (TO_DATE (:date_submit, 'yyyy/mm/dd') >= date_act AND date_dis IS NULL) --condition_weight 2
OR (date_dis IS NULL AND date_act IS NULL) --condition_weight 1
)
AND ROWNUM <= 1
ORDER BY priority DESC
;
Какая-нибудь идея выполнить это SELECT с требованиями?