删除基于同一表中上一行值的行

时间:2014-10-07 16:21:49

标签: sql oracle

我有这张桌子:

LINE    CONTENT                    
245     Route selection data
365     To be continued...          
367     ---    END
373     Route selection data
424     ---    END
454     ---    END
462     PRA subscriber configuration
491     ---    END
545     ---    END

我需要删除内容与前一行具有相同值的行,但我不必删除具有相同值的所有行。 我需要保留CONTENT值与前一行不同的行。 换句话说,我需要一个这样的表:

 LINE         CONTENT                    
    245     Route selection data
    365     To be continued...          
    367     ---    END
    373     Route selection data
    424     ---    END
    462     PRA subscriber configuration
    491     ---    END

我无法根据列线的值删除,因为此列的值每天都会更改。我必须根据列内容的值删除记录。

2 个答案:

答案 0 :(得分:4)

一种简单的方法是使用带LAG的嵌套查询来查找重复的行,并在外部查询中删除它们;

DELETE FROM mytable WHERE line IN (
  SELECT CASE WHEN content = LAG(content) OVER (ORDER BY line) THEN line END r
  FROM mytable
); 

An SQLfiddle to test with

答案 1 :(得分:0)

这是另一种方法,假设line是唯一的:

delete from thistable
    where line not in (select min(line) from thistable group by content);