如何 select 来自 Oracle 的非空值(优化方法)

how to select not-null values from Oracle (optimized method)

如何 select 不是来自 table 的空值 ...

让图像table如下:

master_id |     date_update     | name  |  dpt  | channel | source | active
---------------------------------------------------------------------------
    1     |   1/2/2015 15:43:21 | NULL  |  NULL |  NULL   |   NULL |    y
    1     |   1/2/2015 15:43:21 | NULL  |  FIN  |  NULL   |   NULL |    n
    1     |   1/2/2015 15:40:16 | Elvis |  NULL |  NULL   |   NULL |    n
    1     |   1/2/2015 15:26:38 | NULL  |  NULL |  CH1    |   NULL |    n
    1     |   1/2/2015 14:57:02 | NULL  |  NULL |  NULL   |    S1  |    n
    5     |   2/2/2015 15:28:02 | NULL  |  NULL |  CH2    |   NULL |    y
    5     |   1/2/2015 10:13:01 | Sarah |  NULL |  NULL   |   NULL |    n

我想得到的结果是:

master_id |     date_update     | name  |  dpt  | channel | source | active
---------------------------------------------------------------------------
    1     |   1/2/2015 15:43:21 | Elvis |  FIN  |  CH1    |   S1   |    y 
    5     |   2/2/2015 15:28:02 | Sarah |  NULL |  CH2    |   NULL |    y

您可以注意到,DATE_UPDATE 和 ACTIVE 列是最新的......

哪种方法最优化? 我尝试了 listagg 的组合(将行合并为一个),然后通过 row_number() over() 获取最后的信息或 max() over() 但我不确定它是否是最佳性能解决方案......连接也不是最佳解决方案(因为我需要合并 17 列) ..

Oracle MAX() 聚合函数应该忽略 NULL 值,这意味着它应该选择每个 master_id 组中的非 NULL 值作为 "max" 那个 column/group.

SELECT master_id, MAX(date_update), MAX(name), MAX(dpt), MAX(channel), MAX(source),
    MAX(active)
FROM image
GROUP BY master_id