Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中,如何选择列的最小值并按其他列分组?_Sql_Database_Select_Group By - Fatal编程技术网

在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