我需要从临时表中删除重复的字段,其中有问题的字段并不完全相同。
例如,我有以下数据:
First Last DOB
John Johnson 10.01.02
Steve Stephens 23.03.02
John Johnson 2.02.99
Dave Davies 3.03.03这里,有两个约翰·约翰逊的。我只想要一个约翰·约翰逊--我不在乎是哪一个。因此,生成的表格将如下所示:
First Last DOB
John Johnson 10.01.02
Steve Stephens 23.03.02
Dave Davies 3.03.03我使用的是TSQL,但我更喜欢使用非专有的SQL。
谢谢
发布于 2013-04-09 23:07:01
好吧,我来晚了,但这里有一个数据库不可知的解决方案:
SELECT A.*
FROM YourTable A
INNER JOIN (SELECT [First], [Last], MAX(DOB) MaxDob
FROM YourTable
GROUP BY [First], [Last]) B
ON A.[First] = B.[First]
AND A.[Last] = B.[Last]
AND A.DOB = B.MaxDob带演示的。(感谢@JW提供的小提琴模式)
发布于 2013-04-09 22:34:09
Sql Server支持Common Table Expression和Window Functions。使用ROW_NUMBER(),它为每个组提供排名编号,您可以过滤出排名大于1的记录(这是重复的1)
WITH records
AS
(
SELECT [First], [Last], DOB,
ROW_NUMBER() OVER (PARTITION BY [First], [Last] ORDER BY DOB) rn
FROM TableName
)
DELETE FROM records WHERE rn > 1发布于 2013-04-09 22:39:01
您可以在ROW_NUMBER中使用CTE
WITH CTE AS
(
SELECT RN = ROW_NUMBER() OVER (PARTITION BY First, Last ORDER BY First, Last)
FROM TempTable
)
DELETE CTE
WHERE RN > 1;https://stackoverflow.com/questions/15904763
复制相似问题