首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从没有主键的临时表中移除重复字段

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

Stack Overflow用户
提问于 2013-04-09 22:32:17
回答 4查看 7K关注 0票数 12

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

例如,我有以下数据:

代码语言:javascript
复制
First  Last     DOB
John   Johnson  10.01.02
Steve  Stephens 23.03.02
John   Johnson  2.02.99
Dave   Davies   3.03.03

这里,有两个约翰·约翰逊的。我只想要一个约翰·约翰逊--我不在乎是哪一个。因此,生成的表格将如下所示:

代码语言:javascript
复制
First  Last     DOB
John   Johnson  10.01.02
Steve  Stephens 23.03.02
Dave   Davies   3.03.03

我使用的是TSQL,但我更喜欢使用非专有的SQL。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-09 23:07:01

好吧,我来晚了,但这里有一个数据库不可知的解决方案:

代码语言:javascript
复制
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提供的小提琴模式)

票数 2
EN

Stack Overflow用户

发布于 2013-04-09 22:34:09

Sql Server支持Common Table ExpressionWindow Functions。使用ROW_NUMBER(),它为每个组提供排名编号,您可以过滤出排名大于1的记录(这是重复的1)

代码语言:javascript
复制
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

  • SQLFiddle Demo
  • TSQL Ranking Functions
票数 7
EN

Stack Overflow用户

发布于 2013-04-09 22:39:01

您可以在ROW_NUMBER中使用CTE

代码语言:javascript
复制
WITH CTE AS
(
   SELECT RN = ROW_NUMBER() OVER (PARTITION BY First, Last ORDER BY First,  Last)
   FROM TempTable
)
DELETE CTE 
WHERE RN > 1;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15904763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档