oracle 删除记录

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:19:07
id createdate
1 2008-11-7 14:40:30
1 2008-11-7 14:41:40
1 2008-11-7 14:42:40
2 2008-11-7 14:43:40
2 2008-11-7 14:44:40
3 2008-11-7 14:45:40
2 2008-11-7 14:46:40
3 2008-11-7 14:47:40
3 2008-11-7 14:48:40
问题
1.查询出id相同的,日期最大的两个记录
2.删除id相同的,日期最大的两个记录,以外的记录
注:oracle数据库

SELECT ID, createdate
FROM ( SELECT ID,
createdate,
RANK( ) OVER( PARTITION BY ID ORDER BY createdate DESC ) rank_value
FROM test1 )
WHERE rank_value <= 2;

DELETE FROM test1
WHERE ROWID IN( SELECT row_id
FROM ( SELECT ROWID row_id,
RANK( ) OVER( PARTITION BY ID ORDER BY createdate DESC ) rank_value
FROM test1 )
WHERE rank_value > 2 );

自己研究RANK()和DENSE_RANK()的区别。你或许想用DENSE_RANK()。我不知道如果有多于一行的数据拥有最大(或者第二大)的日期你想怎么办。