Ако разбирам правилно, можете да опитате да използвате CASE WHEN
с сума
прозоречна функция
CASE WHEN
проверете col3
не е null
do collect else display NULL
CREATE TABLE T( col1 VARCHAR(5), col2 DATE, col3 DATE);INSERT INTO T VALUES ('a', to_date('2018-01-20','YYYY-MM-DD') , to_date('2018-03-04','YYYY-MM-DD')); INSERT INTO T VALUES ( 'a', to_date('2018-01-24','YYYY-MM-DD') , to_date('2018-04-04','YYYY-MM-DD')); INSERT INTO T VALUES ('b', to_date('2018-01-02','YYYY-MM-DD') , to_date('2018-05-03','YYYY-MM-DD')); INSERT INTO T VALUES ('c', to_date('2017-01-02','YYYY-MM-DD') , to_date('2017-05-08','YYYY-MM-DD')); INSERT INTO T VALUES ('d', TO_DATE('2016-05-24','YYYY-MM-DD'), null); INSERT INTO T VALUES ('c', TO_DATE('2018-02-05','YYYY-MM-DD') , to_date('2018-05-03','YYYY-MM-DD')); INSERT INTO T VALUES ('c', TO_DATE('2018-07-28','YYYY-MM-DD'), null);
Заявка 1 :
изберете t1.*, rank() OVER(разделяне по col1 подреждане по col2 desc) rank1, (CASE WHEN COL3 НЕ Е NULL THEN SUM(CASE WHEN COL3 IS NOT NULL THEN 1 ELSE 0 END) OVER( дял по col1 подреждане по col2 desc) ELSE NULL END) rank2FROM T t1
<предварителен код>| COL1 | COL2 | COL3 | РАНГ1 | РАНК2 ||------|-----------------------|----------------- -----|-------|--------|| a | 2018-01-24T00:00:00Z | 2018-04-04T00:00:00Z | 1 | 1 || a | 2018-01-20T00:00:00Z | 2018-03-04T00:00:00Z | 2 | 2 || б | 2018-01-02T00:00:00Z | 2018-05-03T00:00:00Z | 1 | 1 || c | 2018-07-28T00:00:00Z | (нула) | 1 | (нула) || c | 2018-02-05T00:00:00Z | 2018-05-03T00:00:00Z | 2 | 1 || c | 2017-01-02T00:00:00Z | 2017-05-08T00:00:00Z | 3 | 2 || d | 2016-05-24T00:00:00Z | (нула) | 1 | (null) |