首页 > 解决方案 > 如何删除我在 1 列中得到重复的结果

问题描述

这是我在这个网站上提出的第一个问题。希望我做对了:-)我已经搜索了类似的问题,但我能找到的只是如何删除整行相同的重复结果我尝试过 DISTINCT 和 GROUP BY 但都没有产生我想要的结果。

我的代码是:

SELECT
[ID-HNO-3] AS number,
[ST-STS-61] AS modality
FROM
[RENALPLUS].[dbo].[tbl_Change_of_Status]
WHERE
[ST-STS-61] = 'akc'
OR
[ST-STS-61] = 'neph op'
GROUP BY
[ID-HNO-3], [ST-STS-61]
ORDER BY
[number] ASC

这会产生以下结果:

column 1 | column2
__________________
1        | neph op
2        | neph op
3        | neph op
4        | neph op
5        | neph op
6        | neph op
6        | AKC
7        | neph op
8        | neph op
9        | neph op
10       | neph op

预期结果是:

column 1 | column2
__________________
1        | neph op
2        | neph op
3        | neph op
4        | neph op
5        | neph op
6        | AKC
7        | neph op
8        | neph op
9        | neph op
10       | neph op

两列都不是键。

每个结果也有一个与之关联的日期,每个日期都是唯一的,但不是关键

你会看到第 1 列有 6 个重复。

在这种情况下,我只需要返回 6 一次,其中 6 是最近的日期

有人可以解释如何做到这一点,因为我似乎无法找出它是如何完成的

谢谢您的帮助。

标签: sqlsql-serverduplicates

解决方案


您可以使用窗口函数:

SELECT [ID-HNO-3] AS number, [ST-STS-61] AS modality
FROM (SELECT cos.*,
             ROW_NUMBER() OVER (PARTITION BY [ID-HNO-3] ORDER BY date DESC) as seqnum
      FROM [RENALPLUS].[dbo].[tbl_Change_of_Status] cos
      WHERE [ST-STS-61] IN ('akc', 'neph op')
     ) cos
WHERE seqnum = 1
ORDER BY [number] ASC

推荐阅读