选择仅具有最小ID的行

时间:2018-04-06 12:47:41

标签: sql greatest-n-per-group

假设我有下表X:

Id  Type  Name
1   1   Jane
2   2   Mary
3   3   Rose
4   4   Rachel
5   4   Darren
6   4   Jay

要生成的select语句是什么:

Id  Type  Name
1   1   Jane
2   2   Mary
3   3   Rose
4   4   Rachel

只会选择每种类型的第一行?欣赏很多。

3 个答案:

答案 0 :(得分:3)

一种简单的方法是使用相关子查询:

select t.*
from t
where t.id = (select min(t2.id) from t t2 where t2.type = t.type);

以下是DEMO

答案 1 :(得分:0)

请尝试

 SELECT t.* FROM test t
 INNER JOIN (SELECT MIN(id) id FROM test GROUP BY TYPE) t2 ON  t.id = t2.id;

答案 2 :(得分:0)

如果您的数据库支持,您可以使用row_number()分析函数。

SELECT Id
    ,Type
    ,Name
FROM (
    SELECT X.*
        ,row_number() OVER (
            PARTITION BY type ORDER BY Id
            ) rn
    FROM X
    ) a
WHERE rn = 1;

Demo