--可以将重复字段,取最早的一次,同理,也可以取时间最新的一次
--方法一
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 |