--可以将重复字段,取最早的一次,同理,也可以取时间最新的一次
--方法一 with tmp as( select row_number() over (partition by 分组字段 order by 时间字段 ) i, * from 表名 where 条件 ) select * from tmp where i=1; --方法二 SELECT * from( select *, row_number() over(partition by 分组字段 order by 时间字段 desc) as rank from 表名 )Temp where Temp.rank=1
例如:获取最新一条数据
DECLARE @Temp TABLE (id INT IDENTITY (1,1), TestName NVARCHAR(50), CreateDate DATETIME ) INSERT @Temp ( TestName, CreateDate ) VALUES ( N'张三', '2022-06-06 16:53:09.753' ), ( N'张三', '2022-06-07 14:00:00.000' ), ( N'李四', '2022-06-06 16:53:09.753' ), ( N'李四', '2022-06-08 14:00:00.000' ); --方法一 with tmp as( select row_number() over (partition by TestName order by CreateDate DESC ) i, TestName, CreateDate from @Temp --这里没有用到条件,所以先注释掉 -- where 条件 ) select TestName, CreateDate from tmp where i=1 --方法二 SELECT TestName, CreateDate from( select TestName, CreateDate, row_number() over(partition by TestName order by CreateDate desc) as rank from @Temp )Temp where Temp.rank=1 即可获取到相应的最后一条记录
TestName | CreateDate |
李四 | 2022-06-08 14:00:00.000 |
张三 | 2022-06-07 14:00:00.000 |