2011-02-15 42 views
6

在问这个问题之前,我使用谷歌搜索,但我无法理解,或者找不到适合我的情况的解决方案。如何消除选择查询中的重复项?

所以,我有一个表有10列,我想消除来自的重复选择的结果。而在结果中的所有列应提交其具有独特的用户标识的

 
+-----------------------------------+------+---------------------+------+ 
| name        | yr | some Columns  |userID| 
+-----------------------------------+------+---------------------+------+ 
| abc        | 2000 |      | 10 | 
| jack        | 2000 |      | 11 | 
| dadas        | 2000 |      | 12 | 
| jack        | 2004 | .............  | 11 | 
| jack        | 2000 | ...........   | 11 | 
| nell        | 2006 | .............  | 13 | 
| ......       | 2000 | .............  | 1 | 
| .............      | 2000 | .............  | 2 | 
| again        | 2000 | .............  | 3 | 
| again        | 2000 |      | 3 | 
| .......       | 1973 | .............  | 2 | 
| abc        | 2000 |      | 10 | 
+0

您正在使用什么RDBMS? – RichardTheKiwi 2011-02-15 03:15:24

+0

因此,对于`userID` 11,你希望`name`和`yr`显示为? – WuHoUnited 2011-02-15 03:20:51

+0

我不明白这个问题。你能画出你要找的结果是什么样的吗? – 2011-02-15 03:59:07

回答

6

如果你不需要保存不同的年,只需要使用DISTINCT ON(FIELD_NAME)

SELECT DISTINCT ON (userID) userdID, name, yr FROM TABLE_NAME 
2

对于PostgreSQL的以及SQL Server的2005+,DB2和更高版本的Oracle(9+),您可以使用窗口函数ROW_NUMBER ()

select * 
from 
(
select *, ROW_NUMBER() over (partition by userID order by yr desc) rown 
) X 
where rown = 1 
0

容易的将是:

SELECT DISTINCT (userID) userdID, name, yr FROM TABLE_NAME