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
这里有约翰约翰逊的两个.我只想要一个约翰逊 - 我不在乎哪一个.所以结果表看起来像:
First  Last     DOB
John   Johnson  10.01.02
Steve  Stephens 23.03.02
Dave   Davies   3.03.03
我正在使用TSQL,但我更喜欢使用非专有的SQL.
谢谢
Sql Server支持Common Table Expression和Window 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
好吧,我迟到了,但这里有一个与数据库无关的解决方案:
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
这是一个 sqlfiddle及其演示。(感谢@JW提供小提琴的架构)