我有一个包含以下列的源表(除此之外),其中没有一个是唯一标识符,我没有权利纠正我认为是错误的内容。此外,数据处于这样一种状态,使得这非常重要。
id(再次,不是唯一的) is_current(与历史相对) 码 LAST_UPDATE_DATE
我需要找到的是每个id的列表以及与每个列表的最新last_update_date的is_current行的相关代码。
我认为我需要使用某种选择分区,但这有点超出了我的联盟。 这是我最初的尝试:
select id,
max(code) keep (dense_rank last order by last_upd_date)
over (partition by id)
from table
WHERE is_current='CURRENT' and ORG='E';
示例数据:(抱歉,它没有格式化)
id | is_current | code | last_upd_date | org |
---+------------+------+--------------------+-----+
1 | CURRENT | ABCD | 12-JUL-13 10:32:29 | E |
1 | CURRENT | EFGH | 13-JUL-13 10:32:29 | E |
2 | CURRENT | ABCD | 12-JUL-13 10:32:29 | E |
3 | CURRENT | ABCD | 13-JUL-13 10:32:29 | E |
3 | CURRENT | EFGH | 12-JUL-13 10:32:29 | E |
感谢您的帮助!
答案 0 :(得分:2)
您可以使用row_number()
:
select id, code
from (select id,
code,
row_number() over (
partition by id
order by last_upd_date desc) as rn
from tbl
where is_current = 'CURRENT'
and org = 'E')
where rn = 1