2014-09-19 52 views
-1

我有这样的数据。有时候有2条记录,其中1条邮寄地址为&是非邮寄地址,有时候只有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,或者我应该有某种IF语句?我对SQL很陌生,所以感谢任何方向或帮助。

+0

你使用的是什么rdbms? – 2014-09-19 22:38:00

+0

可能重复的[检索每个组中的最后一条记录](http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group) – Bulat 2014-09-19 23:07:00

回答

2

你也可以使用此查询为:

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); 
+0

谢谢,UNION ALL正是我一直在寻找的东西,对不起,它花了一段时间来标记答案,但我想确保它对我有用,并且我在这个项目上脱轨了...... – 2014-10-14 04:13:08

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 
+0

我只想说'order by Mailing desc '。 – 2014-09-19 22:49:40