如何 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
如何 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