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

时间:2016-06-10 15:51:33

标签: sql oracle

我有一个包含以下列的源表(除此之外),其中没有一个是唯一标识符,我没有权利纠正我认为是错误的内容。此外,数据处于这样一种状态,使得这非常重要。

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  |

感谢您的帮助!

1 个答案:

答案 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