Sql - 如何根据 mssql 中的列生成唯一记录



我有一个这种格式的mssql表:

身份证 |代码 |姓名 |日期 1 |01 |A |2011-01-01 00:01:23 2 |02 |B |2011-07-01 00:01:23 3 |01 |A |2011-05-01 00:01:23 4 |01 |A |2011-07-01 00:01:23 5 |03 |C |2011-02-01 00:01:23 6 |04 |D |2011-01-01 00:01:23 7 |03 |C |2011-01-01 00:01:23 8 |02 |B |2011-01-01 00:01:23 我需要选择具有最新日期的唯一代码,如下所示: 身份证 |代码 |姓名 |日期 1 |01 |A |2011-07-01 00:01:23 2 |02 |B |2011-07-01 00:01:23 3 |03 |C |2011-02-01 00:01:23 4 |04 |D |2011-01-01 00:01:23

如何编写 sql 查询来实现此目的?

使用相关的子查询:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.code = t.code);

请将表名放在"您的表"的位置,然后尝试下面的查询。

SELECT ID,CODE,NAME,MAX(DATE)
FROM YourTable
GROUP BY ID,CODE,NAME
ORDER BY CODE,NAME DESC

NOT EXISTS

select t.* from tablename t
where not exists (
select 1 from tablename
where code = t.code abd date > t.date
);

或与ROW_NUMBER()

select t.id, t.code, t.name, t.date
from (
select *, row_number() over (partition by code order by date desc) rn
from tablename
) t
where t.rn = 1;

要保持相同的 id:

SELECT Id, Code, Name, [Date]
FROM
(
SELECT *
, ROW_NUMBER() OVER (PARTITION BY Code, Name ORDER BY [Date] DESC, Id) AS Rn
FROM yourtable
) q
WHERE Rn = 1
ORDER BY Id;

要获取新 ID,请执行以下操作:

SELECT 
ROW_NUMBER() OVER (ORDER BY MAX([Date]), Code, Name) AS Id, 
Code, 
Name, 
MAX([Date]) AS [Date]
FROM yourtable
GROUP BY Code, Name;

使用Group BY并获取MAX日期。

SELECT ROW_NUMBER() OVER (ORDER BY Code), Code, Name, MAX(Date)
FROM Table
GROUP BY Code, Name

它非常简单,只是使用了分组依据子句。

select ID,Code,Name,MAX(Date) as Date from TableName Group by Id,Code,Name

另一种方式是CTE功能

With CTE AS
(
SELECT  row_number() over(partition by Code order by Code) rn
ID,Code,Name,MAX(Date) as Date
FROM TableName 
)
select ID,Code,Name,Date from CTE  where rn = 1

试试这个:

SELECT tbl1.* FROM tbl1 WHERE tbl1.date = (SELECT max(tbl2.date) FROM tbl1 tbl2 WHERE tbl2.code = tbl1.code);

最新更新