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