如何在没有键约束的表中选择唯一记录

时间:2015-05-22 09:38:55

标签: sql oracle oracle11g

我有一个名为uniq_select_records的表,其中包含以下列:

sno number, 
item_name varchar2(50),
start_date date, 
end_date date, 
action_flag char(1),
last_modified_date date, 
creation_date date

sno是一个列,我用它来标识item_name的行,它不是唯一或主键,但它不是null。每个项目都会出现sno。没有项目等于sno的否。样品

sno item_name start_date  end_date Action_flag last_modified creation_date
--- --------- ----------  -------- ----------- ------------- -------------
1   sample1   02-MAY-15  27-MAY-14    A        07-MAY-15        02-MAY-15
1   sample1   02-MAY-15  27-MAY-14    D        07-MAY-15        02-MAY-15
1   sample1   27-APR-15  06-JUN-14    C        07-MAY-15        02-MAY-15
1   sample1   27-APR-15  06-JUN-14    C        07-MAY-15        03-MAY-15
2   sample2   07-MAY-15  11-FEB-15    C        07-MAY-15        22-JAN-15
2   sample2   07-MAY-15  11-FEB-15    A        07-MAY-15        22-JAN-15
2   sample2   07-MAY-15  01-FEB-15    C        12-MAY-15        12-MAY-15

操作标志值C =更改,D ='已删除且A =已插入 样本数据如上所示。像这样我们有数百万条记录。现在我们必须选择记录每个项目的最新更改。 每个项目可能有自己的start_date和end_date 所有项目都未在同一日期修改。

任何人都可以建议如何获取每个项目的记录,这些记录是项目的最新更改。

提前感谢。

1 个答案:

答案 0 :(得分:1)

SELECT sno, item_name, max(last_modified)
  FROM uniq_select_records
GROUP BY sno, item_name