Sql oracle:如何获取最新更改的记录匹配条件

Sql oracle:如何获取最新更改的记录匹配条件,sql,oracle,Sql,Oracle,我有一个包含以下列的源表(除其他外),这些列都不是唯一标识符,我无权更正我认为错误的内容。而且,数据处于这样一种状态,使得这一点非常重要 id(同样,不是唯一的) 是否为当前(与历史相反) 代码 上次更新日期 我需要找到的是每个id的列表以及与每个列表最近一次更新日期相关联的行代码 我想我需要使用某种选择而不是分区,但这有点超出我的能力范围。 以下是我的初步尝试: select id, max(code) keep (dense_rank last order by last_upd_da

我有一个包含以下列的源表(除其他外),这些列都不是唯一标识符,我无权更正我认为错误的内容。而且,数据处于这样一种状态,使得这一点非常重要

id(同样,不是唯一的) 是否为当前(与历史相反) 代码 上次更新日期

我需要找到的是每个id的列表以及与每个列表最近一次更新日期相关联的行代码

我想我需要使用某种选择而不是分区,但这有点超出我的能力范围。 以下是我的初步尝试:

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';
示例数据:(抱歉,它不是格式)


谢谢你的帮助

您可以使用
行号()执行此操作。


在查询中,MAX分析函数将为WHERE子句返回的每一行提供一个结果,这样您将看到ID相同的相同行。抛出一个选择不同的。。。你会得到你想要的结果。谢谢!这对我有用。另外,感谢您以某种方式修改了问题的格式。
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  |
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