2011-09-08 82 views
4

我有一個表,它是建立像這樣:T-SQL,選擇一組的第一排

ID  int 
Hash  varchar 
OtherID int 

一些示例數據:

1 3pm6Qav1Vd 23 
2 3pm6Qav1Vd 2 
3 3pm6Qav1Vd 19 
4 3pm6Qav1Vd 17 
5 RSUBe2VBtl 2 
6 3pm6Qav1Vd 4 
7 3pm6Qav1Vd 21 
8 RSUBe2VBtl 23 
9 RSUBe2VBtl 19 

我想能夠拉出來只是每個散列組的第一行:

1 3pm6Qav1Vd 23 
5 RSUBe2VBtl 2 

該行將每個對於每個散列ID最低。我在SQL Server 2005上使用T-SQL。我不確定從哪一個開始。

回答

7
SELECT t.ID, t.Hash, t.OtherID 
    FROM (SELECT ID, Hash, OtherID, ROW_NUMBER() OVER(PARTITION BY Hash ORDER BY ID) AS RowNum 
       FROM YourTable) t 
    WHERE t.RowNum = 1 
+0

網絡上任何地方的最佳答案真的。其他人嘗試複雜的事情與工會,其他形式等。謝謝! – Fandango68

3

簡單!

SELECT * 
FROM [tableName] 
WHERE ID IN (
    SELECT MIN(ID)  
    FROM [tableName] 
    GROUP BY Hash 
) 

希望這會有所幫助。

+0

我相信你的意思是「'GROUP BY Hash'」。 –

+0

@John Saunders - 確實。 – smdrager

3
select ID, Hash, OtherId 
from (
select ID, Hash, OtherId, row_number() over (partition by Hash order by ID) as RN 
from yourtable 
) a 
where RN = 1 
1

做到像下面

  SELECT * FROM Table T1 
     INNER JOIN ( 
        SELECT MIN(ID) ID FROM Table  GROUP BY Hash) T2 
     ON T1. ID = T2.ID 

希望這有助於一些!

+0

我相信你的意思是「'GROUP BY Hash'」。 –