代码之家  ›  专栏  ›  技术社区  ›  afeef

无法按数据分组

  •  1
  • afeef  · 技术社区  · 6 年前

    输入

    A   B    date
    --------------------
    00  12   22-01-2019
    00  12   null
    00  25   22-01-2019
    00  24   22-01-2019 
    

    根据以上数据,我需要以下输出:

      A   B    date
    --------------------
     00  12    null
     00  25    22-01-2019
     00  24   22-01-2019
    

    我需要从桌子上打开、关闭记录。

    如果我使用的日期为空,则不会出现其他现有记录。

    我需要申请B栏的条件。

    如果列B的日期中有空值,则将显示空值。 否则,如果同时存在空值和非空值空值,则将输出日期空值。

    Select a,b,date 
    from table1,table2
    where ...
    group by a,b,date
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Ponder Stibbons    6 年前

    聚合函数忽略空值,因此需要 anaytic version :

    select a, b, min(date_) keep (dense_rank first order by date_ nulls first) 
      from input group by a, b
    

    demo

        2
  •  1
  •   MT0    6 年前

    Oracle设置 :

    CREATE TABLE table_name ( A, B, DT ) AS
    SELECT 0, 12, DATE '2019-01-22' FROM DUAL UNION ALL
    SELECT 0, 12, NULL FROM DUAL UNION ALL
    SELECT 0, 25, DATE '2019-01-22' FROM DUAL UNION ALL
    SELECT 0, 24, DATE '2019-01-22' FROM DUAL;
    

    查询 :

    SELECT A,
           B,
           CASE
           WHEN COUNT( CASE WHEN DT IS NULL THEN 1 END ) > 0
           THEN NULL
           ELSE MAX( DT )
           END AS DT
    FROM   table_name
    GROUP BY A, B;
    

    产量 :

     A |  B | DT       
    -: | -: | :--------
     0 | 12 | null     
     0 | 24 | 22-JAN-19
     0 | 25 | 22-JAN-19
    

    小提琴 here