求一个sql如何只保留最后一条

时间:2022-04-25 15:02:20
比喻如数据库中有N条记录,但F1=1  有可能有3条,有可能6条,有可能没有。我需要数据库中F1=1记录只保留最靠后的一条,这个sql如何处理。

Ms-2000

7 个解决方案

#1


order by XX(例如ID) desc 或者asc
select top 1 * fom table 

#2


如果有时间,那么就 
select * from table a where not exists(select * from table where F1 = a.F1 and 时间 > a.时间)

#3


引用 2 楼 KanzakiOrange 的回复:
如果有时间,那么就 
select * from table a where not exists(select * from table where F1 = a.F1 and 时间 > a.时间)

  不用指定字段?

#4


处理表重复记录(查询和删除)_整理贴4
http://bbs.csdn.net/topics/240034273

参照以上方法

#5


引用 3 楼 cqhydz 的回复:
Quote: 引用 2 楼 KanzakiOrange 的回复:

如果有时间,那么就 
select * from table a where not exists(select * from table where F1 = a.F1 and 时间 > a.时间)

  不用指定字段?

必需要其它的字段,指定字段都一模一样,怎么处理。

#6


F1 和Nr--大小列定义 最近一次的记录可相同
DECLARE @T TABLE(F1 INT,Nr int)
INSERT INTO @T
        ( F1, Nr )
VALUES  ( 1, -- ID - int
          10  -- Num - int
          ),(2,20),(2,30),(2,30);

SELECT  * FROM (SELECT *,RN=ROW_NUMBER()OVER(PARTITION BY F1 ORDER BY Nr desc) FROM @T) AS a WHERE RN=1
/*
F1 Nr RN
1 10 1
2 30 1
*/

#7



select *FROM tb where ID=(SELECT  MAX(id) as id FROM tb    having COUNT(id)>1 )

#1


order by XX(例如ID) desc 或者asc
select top 1 * fom table 

#2


如果有时间,那么就 
select * from table a where not exists(select * from table where F1 = a.F1 and 时间 > a.时间)

#3


引用 2 楼 KanzakiOrange 的回复:
如果有时间,那么就 
select * from table a where not exists(select * from table where F1 = a.F1 and 时间 > a.时间)

  不用指定字段?

#4


处理表重复记录(查询和删除)_整理贴4
http://bbs.csdn.net/topics/240034273

参照以上方法

#5


引用 3 楼 cqhydz 的回复:
Quote: 引用 2 楼 KanzakiOrange 的回复:

如果有时间,那么就 
select * from table a where not exists(select * from table where F1 = a.F1 and 时间 > a.时间)

  不用指定字段?

必需要其它的字段,指定字段都一模一样,怎么处理。

#6


F1 和Nr--大小列定义 最近一次的记录可相同
DECLARE @T TABLE(F1 INT,Nr int)
INSERT INTO @T
        ( F1, Nr )
VALUES  ( 1, -- ID - int
          10  -- Num - int
          ),(2,20),(2,30),(2,30);

SELECT  * FROM (SELECT *,RN=ROW_NUMBER()OVER(PARTITION BY F1 ORDER BY Nr desc) FROM @T) AS a WHERE RN=1
/*
F1 Nr RN
1 10 1
2 30 1
*/

#7



select *FROM tb where ID=(SELECT  MAX(id) as id FROM tb    having COUNT(id)>1 )