从表中删除几乎重复的记录

时间:2019-01-08 19:06:42

标签: sql sql-server

从此查询开始

SELECT DISTINCT Name,Manufacturer,Model,RevisionID FROM dbo.COMPUTER_TABLE ORDER BY Name,RevisionID

我进入下表:

(Name,Manufacturer,Model,RevisionID)

UST8923 | Microsoft | Surface 2 | 1
UST8923 | Microsoft | Surface 2 | 2
UST8923 | Microsoft | Surface 3 | 3
UST8923 | Microsoft | Surface 3 | 4
CAD4258 | Lenovo | Thinkpad P1 | 1
CAD4258 | Lenovo | Thinkpad P1 | 2
CAD4258 | Dell | Latitude 5480 | 3

我只需要获取具有最高RevisionID的记录,而丢弃其余的记录。 因此,我需要得到以下结果:

UST8923 | Microsoft | Surface 3 | 4
CAD4258 | Dell | Latitude 5480 | 3

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

相关子查询是一种简单而有效的解决方案:

select ct.*
from dbo.COMPUTER_TABLE ct
where ct.revisionid = (select max(ct2.revisionid)
                       from COMPUTER_TABLE ct2
                       where ct2.name = ct.name
                      );

答案 1 :(得分:1)

您需要GROUP BY Name, Manufacturer

SELECT 
  Name,
  Manufacturer, 
  MAX(Model) AS MaxModel,
  MAX(RevisionID) AS MaxRevisionID 
FROM dbo.COMPUTER_TABLE 
GROUP BY Name, Manufacturer
ORDER BY Name, MAX(Model), MAX(RevisionID)