我有一张桌子
ID | value1 |value2
1  | 15     | A
2  | 15     | B
3  | 16     | D
4  | 16     | A
5  | 16     | C作为结果,我希望只看到value1的第一条记录(分组依据?)如下所示:
ID | value1 |value2
1  | 15     | A
2  | 16     | D我可以使用以下命令来实现:
select * from vals
group by value1 但是,在SQL server中,我是否总能确保他获得组中的第一条记录(ID最低)?
发布于 2013-03-28 23:39:06
你实际上不能这样做:
select * from vals
group by value1 因为它甚至不会执行,它会返回每一行,因为每一行上的ID都不同。因此,如果您尝试获取每个value1的第一行,则可以执行以下操作:
select * from vals
where id in (select min(id) from vals group by value1)这将使您获得每个组 by value1的第一行。
发布于 2013-03-28 23:41:37
;WITH cte AS 
(
    SELECT MIN(id)AS id FROM vals
    GROUP BY value1 
)
SELECT vals.* FROM cte
INNER JOIN vals ON vals.id = cte.id发布于 2013-03-28 23:41:58
你当然可以:
 Select * From vals v
 Where id = (Select Min(id)
             From vals 
             Where value1 = v.value1)https://stackoverflow.com/questions/15686001
复制相似问题