从没有主键的临时表中删除重复的字段

nf3*_*743 8 sql t-sql sql-server sql-delete

我需要从临时表中删除重复字段,其中有问题的字段不完全相同.

例如,我有以下数据:

First  Last     DOB
John   Johnson  10.01.02
Steve  Stephens 23.03.02
John   Johnson  2.02.99
Dave   Davies   3.03.03
Run Code Online (Sandbox Code Playgroud)

这里有约翰约翰逊的两个.我只想要一个约翰逊 - 我不在乎哪一个.所以结果表看起来像:

First  Last     DOB
John   Johnson  10.01.02
Steve  Stephens 23.03.02
Dave   Davies   3.03.03
Run Code Online (Sandbox Code Playgroud)

我正在使用TSQL,但我更喜欢使用非专有的SQL.

谢谢

Joh*_*Woo 6

Sql Server支持Common Table ExpressionWindow Functions.通过使用ROW_NUMBER()每个组的供应等级编号,您可以过滤掉排名大于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
Run Code Online (Sandbox Code Playgroud)


Lam*_*mak 2

好吧,我迟到了,但这里有一个与数据库无关的解决方案:

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
Run Code Online (Sandbox Code Playgroud)

这是一个 sqlfiddle及其演示。(感谢@JW提供小提琴的架构)