2013-02-25 174 views
2

我有如下表ID和列数查找第一个记录每个ID SQL查询

ID Number 
1 34534 
1 45345 
1 45353 
2 56454 
2 45645 
3 65756 
3 67565 
3 87865 
3 38932 
4 36468 
4 45332 

预期成果是

1 34534 
2 56454 
3 65756 
4 36468 

我需要把所有的每个ID拳头数。

我该如何编写一个查询来实现这个目标?我不擅长SQL。 :(

注:使用SQL Server 2005

回答

6

尝试是这样的:

SELECT ID, Number FROM 
    (SELECT ID, Number, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Number) RN FROM MyTable) Base 
    WHERE Base.RN = 1 

显然MyTable是你的表的名称

啊......显然2 56454是不可能的你。只能得到2 45645。除非你使用ORDER BY子句,否则SQL表中的顺序是一种幻想,否则SQL服务器可以重新排列它想要的行。

+3

+1还有一个选项;示例SQLFiddle:http://www.sqlfiddle.com/#!3/c0bf7/4 – GolfWolf 2013-02-25 08:39:34

+0

@ w0lf我不知道SQL小提琴...它是新的?一年前我搜索了一些类似的东西,但我无法找到它。 – xanatos 2013-02-25 08:42:05

+0

我一直在使用它大约半年,我想。在这样的小型SQL场景上进行协作非常棒。 – GolfWolf 2013-02-25 09:12:14

0

CROSS APPLY

SELECT * 
FROM dbo.test12 t1 CROSS APPLY (
           SELECT TOP 1 Number 
           FROM dbo.test12 t2 
           WHERE t1.ID = t2.ID 
           ) o 
WHERE t1.Number = o.Number 

演示上SQLFiddle