2016-02-02 100 views
1

我怎么可以从表中没有空值...如何从甲骨文(优化方法)选择不空值

让图像表如下:

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得到最后的信息()超过()MAX(组合)在(),但我不知道这是否是最好的性能解决方案...连接也不是最好的解决方案(因为有17列我需要合并)..

+0

我们可以假设给定列和'master_id'组,该数据将疏相对于'NULL'值,这意味着将在该列中只有一个非'NULL'价值?另外,你是否总是为每个'master_id'组选择_latest_'date_update'? –

+1

是的... –

回答

1

集合函数应该忽略NULL值,这意味着它应该选取非NULL值每个master_id组是该列/组的“最大值”。

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

这就是我在想什么:)但是表现如何? –

+0

而不是查询的性能,我认为表的结构可能是更大的关注。你的表是_sparse_,这意味着它有很多未使用的空间。您是否计划在生产环境中经常执行此查询? –

+0

我明白你的意思......问题是不正确的应用程序行为:(我试图用该查询修复这个“bug”,它将用作报告的data_mart ...你知道,有种数据整合。 。 –