2011-09-08 83 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'”。 –