T-SQL,选择一组的第一行

时间:2011-09-08 18:45:44

标签: sql-server-2005 tsql

我有一个像这样设置的表:

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。我不确定从哪一个开始。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

简单!

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

希望这有帮助。

答案 2 :(得分: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

答案 3 :(得分:1)

执行以下操作

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

希望这会有所帮助!!