用 sql 语句如何实现 删除最近一段时间以前的数据?(100分)

V

VGA

Unregistered / Unconfirmed
GUEST, unregistred user!
数据如下:
姓名 日期时间 其他字段
张三 2002-02-03
李司 2002-10-19
王五 2001-11-07
张三 2002-08-09
王五 2002-12-12

要保留最近一段时间的数据,如每个人 都保留最近 1 月的,用 sql 如何做到呢?
 
delete from yourtable where 日期时间<(GETDATE()-30)
 
delete table where birthday<dateadd(month,-1,getdate()
 
sorry
delete from table where birthday<dateadd(month,-1,getdate()
 
如果某人最近一月有两个数据,是两个都要还是要最近的一个
 
是[blue] 每个人[/blue] 都保留最近 1 月的. 如 张三 最后登陆 日期为:2002-09-09
那么在2002-08-09 这段时间的资料都保留,尽管 今天是 2003-04-16

两个都要
 
我没测试
DELETE FROM YOURTABLE WHERE 姓名+LEFT(日期时间,7) NOT IN (
SELECT A.姓名+LEFT(MAX(日期时间),7) FROM YOURTABLE INNER JOIN
(SELECT DISTINCT 姓名 FROM YOURTABLE ) AS A
ON (YOURTABLE.姓名=A.姓名) GROUP BY A.姓名,日期时间
)
 
delete from yourtable where 日期时间<(month(getdate())-1)
但是要注意:1月时要改一下,即(month(getdate())-1)=0,你就手工赋值为12
 
delete from yourtable where datediff(mm, 日期时间, getdate())>0
 
你是要保存每一个人的最后登陆时间的最后一个月的数据吗??
我看一条语句不行的,最好是用临时表或用一个数组保存不重复的姓名和每一个人的最后登陆
时间,再搜索,再删。
 
NoRose: 没错,正是这个意思
 

delete tabelname
where month(日期字段) not in
(select Month(日期自动) from tablename where Month(日期字段) = 4 )
 
试验成功
不过我是用Select取来看的,你换成delete,把我的select 作为条件就可以了
原有数据
ID TDate price
1 2003-04-15 120
1 2003-03-16 115
1 2003-03-01 100
2 2003-01-14 113
2 2003-03-05 118
2 2003-02-15 0

Sql 语句

SELECT DISTINCT a.ID, a.Tdate
FROM A AS a, [select ID,max(tdate) as edate from a group by ID]. AS b
WHERE a.id=b.id and dateDiff("d",a.tdate,b.edate)<=30

查询结果
ID Tdate
1 2003-03-16
1 2003-04-15
2 2003-02-15
2 2003-03-05


应该满足你的要求了吧
 
修改如下:
delete tablename table1 where (date<=(select max(Date) from
tablename table2 where Table2.name=table1.name)-30)

测试过,成功!

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部