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.
谢谢
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
Run Code Online (Sandbox Code Playgroud)
好吧,我迟到了,但这里有一个与数据库无关的解决方案:
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提供小提琴的架构)
归档时间: |
|
查看次数: |
5716 次 |
最近记录: |