在SQL中,如何选择列的最小值并按其他列分组?
我在下面有一个查找表:在SQL中,如何选择列的最小值并按其他列分组?,sql,database,select,group-by,Sql,Database,Select,Group By,我在下面有一个查找表: id ref order 1 6 0 2 6 0 3 7 0 5 34 0 6 33 0 6 255 1 9 12 0 9 80 1 12 7 0 12 76 1 13 10 0 15 12 0 16 6 0 16 7 1 17 6 1 17 63 0 18 7 0 19 7 1 19 75 0 20 6 0 20 63 1 因此,在查找表(tab_l
id ref order
1 6 0
2 6 0
3 7 0
5 34 0
6 33 0
6 255 1
9 12 0
9 80 1
12 7 0
12 76 1
13 10 0
15 12 0
16 6 0
16 7 1
17 6 1
17 63 0
18 7 0
19 7 1
19 75 0
20 6 0
20 63 1
因此,在查找表(tab_lkp)中,它有列[id](实体的id)、[ref](指向另一个表中其他实体的引用id)和[order](表示引用的顺序,顺序越小表示优先级越高)
我的期望是,对于每个id,只选择一个具有最小顺序的ref。我的代码是(通过以下方式):
但代码不适用于我,结果仍然包含每个ID的多条记录:
id ref order
1 6 0
2 6 0
3 7 0
5 34 0
6 33 0
6 255 1
9 12 0
9 80 1
12 7 0
12 76 1
13 10 0
15 12 0
16 6 0
16 7 1
17 6 1
17 63 0
18 7 0
19 7 1
19 75 0
20 6 0
20 63 1
你能告诉我我的密码有什么问题吗?我该如何实现我的目标 您通常会使用
行编号()执行此操作。
:
或者通过使用一个子查询,该子查询完全按照您的要求执行, 对于每个ID,只选择一个顺序最小的引用
从ANSI sql方法来看:
select x2.id, x2.ref, x2.order
from MyTable x2
inner join
(
select id, min(order) as min_order
from MyTable
group by id
) x1
on x1.id = x2.id
and x1.min_order = x2.order
标记DBMS以获得更好的响应,并按
ref
分组,因此如果id有多个ref
错误,它将返回所有错误。请显示预期输出
select t.*
from (select t.*, row_number() over (partition by id order by ref) as seqnum
from [dbo].[tab_lkp] t
) t
where seqnum = 1;
Select * from tab_lkp t
Where order =
(Select Min(order) from tab_lkp
where Id = t.Id)
select x2.id, x2.ref, x2.order
from MyTable x2
inner join
(
select id, min(order) as min_order
from MyTable
group by id
) x1
on x1.id = x2.id
and x1.min_order = x2.order