如何通过比较表中收到的先前记录来查找重复记录

时间:2014-03-11 09:10:35

标签: sql database oracle

我有一张桌子

seq_num create_dt col1 col2 is_load 1 1/1/2014 A B 2 2/1/2014 c D
3 3/1/2014 A B

日常数据通过加载程序加载到表中。我想编写一个查询,它应该通过与前几天的记录进行比较找到当前日记录中的重复数据,如果找到任何重复记录,则更新列is_load ='D'(从重复开始)。

所以结果应该像

`seq_num  create_dt   col1  col2  is_load
   1       1/1/2014     A     B            
   2       2/1/2014     C     D           
   3       3/1/2014     A     B          
   .          ....      .      .            
   .          ....      .      .
   11      11/3/2014     A     B      D    `

提前致谢!!!!!

2 个答案:

答案 0 :(得分:1)

试试这个:

update myTable m
set is_load = 'D'
where exists (select null
              from myTable
              where m.col1 = col1
                and m.col2 = col2
                and m.seq_num > seq_num);

此条件m.seq_num > seq_num有助于避免将第一个条目设置为“D”。

如果真的很重要,您可以轻松地将seq_num更改为create_dt,但这可能会留下一些在同一天加载的条目。

答案 1 :(得分:0)

    SELECT seq_num, col1, 
    COUNT(col1) AS Num_Of_Occurrences
    FROM table_name
    GROUP BY col1
    HAVING ( COUNT(col1) > 1 );