SQL查询删除所有早于上一个记录的记录

时间:2014-01-28 11:21:53

标签: sql oracle sql-delete

我想在以下上下文中创建一个SQL oracle请求:

我有一个表,其中用户名是主键。 该表为每个用户名提供了数百条记录,并带有最后修改日期。

我想删除所有记录,其修改日期比最近的记录早1个月,因此对于每个用户名都是如此。

我想我可以简单地使用我的表的两个实例(一个执行删除,一个执行具有最新记录的选择然后加入两个),但我真的不确定这个。

有人有任何想法吗?

感谢。

3 个答案:

答案 0 :(得分:0)

根据您的专栏

尝试这样做
DELETE username 
FROM   tablename 
WHERE  created_date >= To_date(?, 'dd-MON-yyyy HH24:MI:SS') 
       AND created_date <= To_date(?, 'dd-MON-yyyy HH24:MI:SS') 

答案 1 :(得分:0)

找出内部查询中每个user_name的最后修改日期(在下面的查询中用别名i表示),并在最新版本之前至少30天删除该用户拥有last_modification_date的任何行。< / p>

Delete from tablename o
where o.last_modification_date + 30 < (select max(i.last_modification_date) 
from tablename i
where i.user_name = o.user_name)

此查询仅在last_modification_date的数据类型为datedatetime等时才有效。

答案 2 :(得分:0)

要删除同一用户名的另一个记录并且修改日期超过一个月的所有记录,请使用:

delete from my_table t1
where exists (select null
                from my_table t2
               where t2.username          = t1.username and
                     t2.modification_date > add_months(t1.modification_date,1))