sql 过滤重复字段,取最早或最新记录

发布时间 2023-03-29 15:25:37作者: 独揽日月星河

--可以将重复字段,取最早的一次,同理,也可以取时间最新的一次

--方法一
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