从多行中提取最新的列值

时间:2016-08-04 22:18:02

标签: sql oracle11g

我正在尝试将每个公司的多行合并为一行,每行保留最新的列属性值。

WITH COMPANY_DATA AS(
SELECT 1 ID, 'ABC Co.' COMPANY, NULL ATTR1, 'A' ATTR2, 'B' ATTR3, '8/1/2016 8:53.17 AM' ROW_UPDATED FROM DUAL UNION ALL
SELECT 2 ID, 'ABC Co.' COMPANY, 'F' ATTR1, NULL ATTR2, NULL ATTR3, '8/1/2016 8:55.19 AM' ROW_UPDATED FROM DUAL UNION ALL
SELECT 3 ID, 'ABC Co.' COMPANY, 'E' ATTR1, 'A' ATTR2, NULL ATTR3, '8/1/2016 8:55.23 AM' ROW_UPDATED FROM DUAL
)

SELECT  COMPANY,
        ATTR1,
        ATTR2,
        ATTR3
FROM COMPANY_DATA

从上面的示例表中我想返回:

COMPANY= ABC Co.
ATTR1 = E
ATTR2 = A
ATTR3 = B

1 个答案:

答案 0 :(得分:0)

是的,这很棘手。您可以使用keep

select company,
       max(attr1) keep (dense_rank first order by (case when attr1 is not null then id end) desc nulls last) as attr1,
       max(attr2) keep (dense_rank first order by (case when attr2 is not null then id end) desc nulls last) as attr2,
       max(attr3) keep (dense_rank first order by (case when attr3 is not null then id end) desc nulls last) as attr3
from company_data cd
group by company;