--可以将重复字段,取最早的一次,同理,也可以取时间最新的一次
--方法一
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 |
本文介绍了两种SQL方法,用于从数据表中选取每个分组内时间最新的或最早的记录。示例展示了如何根据TestName字段分组,并按CreateDate降序排列,以获取每个用户最新的创建日期。
4654

被折叠的 条评论
为什么被折叠?



