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

SQL查询删除所有早于上一条记录的记录,sql,oracle,sql-delete,Sql,Oracle,Sql Delete,我想在以下上下文中创建SQL oracle请求: 我有一个表,其中用户名是主键。 此表为每个用户名获取了数百条记录,其中包含最后一次修改日期 我想删除所有修改日期比最近一个修改日期早1个月的记录,每个用户名都是如此 我想我可以简单地使用表的两个实例,一个用于执行删除,另一个用于对最近的记录执行选择,然后将这两个记录合并,但我真的不确定这一点 有人知道吗 谢谢。请根据您的专栏尝试这样做 DELETE username FROM tablename WHERE created_date &

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

我有一个表,其中用户名是主键。 此表为每个用户名获取了数百条记录,其中包含最后一次修改日期

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

我想我可以简单地使用表的两个实例,一个用于执行删除,另一个用于对最近的记录执行选择,然后将这两个记录合并,但我真的不确定这一点

有人知道吗


谢谢。

请根据您的专栏尝试这样做

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') 

在下面的查询中,找出别名i表示的内部查询中每个用户名的上次修改日期,并删除该用户在最新修改日期前至少30天具有上次修改日期的任何行

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)

仅当上次修改日期的数据类型为日期、日期时间等时,此查询才起作用。

若要删除具有相同用户名且修改日期晚于一个月的所有记录,请使用:

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))

您是否尝试编写SELECT语句来显示所有应删除的记录?PL/SQL将易于开发和维护。!我认为问题是针对每个用户名的。@MaheswaranRavisankar yea如果该条件与clauseNo的条件相匹配,则每个用户的删除必须基于最后可用日期后的30天。最后一个可用的日期对于所有用户来说可能不一样。您的查询的问题是,如果用户有最后修改日期的记录,第三十个,第二十个,则只考虑第一个日期。我希望查询为每个用户执行max,分别检索第一个(30日前一个月)和第二个(20日前一个月)的所有记录。这正是abov查询所做的。它是按用户执行的实际上,我不想删除所有记录,但只删除一个月以上的记录,而不是当前月份内的记录。是否比该用户名的最新记录旧?