Oracle SQL,其中条件权重

Oracle SQL,其中条件权重,oracle,select,Oracle,Select,创建表格 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_di

创建表格

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\u code
date\u submit

我正在使用OR连接器,但我需要根据
date\u act
date\u dis
值定义一些条件权重(实际上不包括在
mytable
中)

如果条件权重4为
true
,则左侧(
3
2
1
)将被忽略

如果条件权重4为
且条件权重3为
,则条件权重2和条件权重1将被忽略

如果条件_权重4和3为
false
且条件_权重2为
true
将忽略条件_权重1

如果条件权重4、3和2为
false
a仅对条件权重1进行评估

预期结果。。。

从mytable中选择*
其中产品代码=:产品代码
及(
截止日期(:提交日期,'yyyy/mm/dd'),介于生效日期和发布日期之间——条件重量4
或(截止日期(:DATE\u submit,'yyyy/mm/dd')=日期和日期为空)--条件权重2
或者(日期dis为空,日期act为空)——条件权重1
)

ROWNUM我检查了你的第二个图像表,结果

var date_submit varchar2(12);
exec :date_submit := '2019/12/31';
var product_code varchar2(12);
exec :product_code := 'bla';


SELECT resp.*, :date_submit FROM (
    SELECT 4 condition_weight, mytable.priority prio, mytable.* FROM mytable 
    WHERE product_code = :product_code 
    AND TO_DATE (:date_submit, 'yyyy/mm/dd') BETWEEN date_act AND date_dis

    UNION

    SELECT 3 condition_weight, mytable.priority prio, mytable.* FROM mytable 
    WHERE product_code = :product_code 
    AND TO_DATE (:date_submit, 'yyyy/mm/dd') <= date_dis AND date_act IS NULL

    UNION

    SELECT 2 condition_weight, mytable.priority prio, mytable.* FROM mytable 
    WHERE product_code = :product_code 
    AND TO_DATE (:date_submit, 'yyyy/mm/dd') >= date_act AND date_dis IS NULL

    UNION

    SELECT 1 condition_weight, mytable.priority prio, mytable.* FROM mytable 
    WHERE product_code = :product_code 
    AND date_dis IS NULL AND date_act IS NULL

    ORDER BY condition_weight DESC, prio DESC   
) resp
WHERE ROWNUM <= 1
;
2019/02/15

CONDITION_WEIGHT       PRIO PRODUCT_CODE           PRIORITY DATE_ACT  DATE_DIS  :DATE_SUBMIT                                                                                                                    
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
               4          0 bla                           0 01-JAN-19 31-JAN-19 2019/01/15     
CONDITION_WEIGHT       PRIO PRODUCT_CODE           PRIORITY DATE_ACT  DATE_DIS  :DATE_SUBMIT                                                                                                                    
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
               4          1 bla                           1 01-FEB-19 28-FEB-19 2019/02/15                                                                                                                      
2018/12/31

CONDITION_WEIGHT       PRIO PRODUCT_CODE           PRIORITY DATE_ACT  DATE_DIS  :DATE_SUBMIT                                                                                                                    
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
               3          5 bla                           5           28-FEB-19 2018/12/31                                                                                                                      
CONDITION_WEIGHT       PRIO PRODUCT_CODE           PRIORITY DATE_ACT  DATE_DIS  :DATE_SUBMIT                                                                                                                    
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
               2          3 bla                           3 01-FEB-19           2019/12/31                                                                                                                      
2019/12/31

CONDITION_WEIGHT       PRIO PRODUCT_CODE           PRIORITY DATE_ACT  DATE_DIS  :DATE_SUBMIT                                                                                                                    
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
               3          5 bla                           5           28-FEB-19 2018/12/31                                                                                                                      
CONDITION_WEIGHT       PRIO PRODUCT_CODE           PRIORITY DATE_ACT  DATE_DIS  :DATE_SUBMIT                                                                                                                    
---------------- ---------- -------------------- ---------- --------- --------- --------------------------------------------------------------------------------------------------------------------------------
               2          3 bla                           3 01-FEB-19           2019/12/31                                                                                                                      

我认为你的条件符合你的要求。您的查询有什么问题?请以表格文本而不是图像的形式提供示例数据。还有,你说你只想要一行,但是你的结果是4行,为什么?