2013-02-25 88 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