【问题标题】:Select unique record for each person based on 1 column根据 1 列为每个人选择唯一记录
【发布时间】:2014-09-19 22:36:02
【问题描述】:

我有这样的数据。有时有 2 条记录,1 条带有邮寄地址和非邮寄地址,有时只有 1 条记录,它可能是邮寄地址或非邮寄地址。

UniqueID,FirstName,LastName,DOB,House Number,City,State,Mailing

4444,George,Jetson,10/10/55,800,Orbit City,Space,0    
4444,George,Jetson,10/10/55,555,Orbit City,Space,1    
5555,Fred,Flintstone,12/12/04,88,Bedrock,PH,0    
5555,Fred,Flintstone,12/12/04,100,Bedrock,PH,1    
6666,Barney,Rubble,7/7/07,999,Bedrock,PH,0    
7777,Jonny,Quest,5/30/64,343,Action City,KS,1

我正在尝试进行一个查询,该查询将为每个人返回 1 行,并且如果存在邮寄地址,则更喜欢它。所以理想情况下查询会返回这些记录

4444,George,Jetson,10/10/55,555,Orbit City,Space,1    
5555,Fred,Flintstone,12/12/04,100,Bedrock,PH,1    
6666,Barney,Rubble,7/7/07,999,Bedrock,PH,0    
7777,Jonny,Quest,5/30/64,343,Action City,KS,1

根据我一直在阅读的一些文章,有人有什么建议吗?我想也许我需要一个子查询?在我正在阅读的示例中,我被卡在了 OVER PARTITION BY 部分,还是应该有某种 IF 语句?我是 SQL 的新手,所以感谢任何指导或帮助。

【问题讨论】:

标签: sql select subquery distinct


【解决方案1】:

您也可以将此查询表示为:

select *
from tablename t
where mailing = 1
union all
select *
from tablename t
where not exists (select 1 from tablename t2 where t2.uniqueid = t.uniqueid);

【讨论】:

  • 谢谢,UNION ALL 正是我想要的,抱歉花了一段时间来标记答案,但我想确保它对我有用,我在这个项目上偏离了轨道......
【解决方案2】:

使用 SQL-Server,您可以使用 ROW_NUMBER,例如使用 CTE:

WITH CTE AS
(
   SELECT UniqueID, FirstName, LastName, DOB, [House Number], City, State, Mailing,
          rn = ROW_NUMBER() OVER (PARTITION BY UniqueID  ORDER BY Mailing DESC)
   FROM dbo.TableName
)
SELECT UniqueID, FirstName, LastName, DOB, [House Number], City, State, Mailing,
FROM CTE
WHERE rn = 1

这是一个小提琴:http://sqlfiddle.com/#!3/886b0/5/0

UNIQUEID    FIRSTNAME   LASTNAME    DOB HOUSE NUMBER    CITY    STATE               MAILING
4444        George  Jetson  October, 10 1955 00:00:00+0000  555 Orbit City  Space   1
5555        Fred    Flintstone  December, 12 2004 00:00:00+0000 100 Bedrock PH      1
6666        Barney  Rubble  July, 07 2007 00:00:00+0000 999 Bedrock PH              0
7777        Jonny   Quest   May, 30 1964 00:00:00+0000  343 Action City KS          1

【讨论】:

  • 我只想说order by Mailing desc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多