sql >> データベース >  >> RDS >> Oracle

OracleSQLの条件付きランキング

    私が正しく理解している場合は、CASE WHENを使用してみてください。 sumを使用 ウィンドウ関数

    CASE WHEN col3を確認してください nullではありません 蓄積するか、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

    select t1.*,
        rank() OVER(partition by col1 order by col2 desc) rank1,
        (CASE WHEN COL3 IS NOT NULL THEN
           SUM(CASE WHEN COL3 IS NOT NULL THEN 1 ELSE 0 END) OVER(partition by col1 order by col2 desc)
        ELSE
           NULL
        END) rank2
    FROM T t1
    

    結果

    | COL1 |                 COL2 |                 COL3 | RANK1 |  RANK2 |
    |------|----------------------|----------------------|-------|--------|
    |    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 |
    |    b | 2018-01-02T00:00:00Z | 2018-05-03T00:00:00Z |     1 |      1 |
    |    c | 2018-07-28T00:00:00Z |               (null) |     1 | (null) |
    |    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 |               (null) |     1 | (null) |
    


    1. エラーデータを要約するPostgresSQLクエリ

    2. Laravel4の列のあいまいなエラー

    3. 2つの日付の間にカバレッジを持つ従業員を見つけるためのより効率的な方法

    4. MySQLデータベース最適化のベストプラクティス