Mysql 如何仅从部分不同值的每个子集中选择第一行?

Mysql 如何仅从部分不同值的每个子集中选择第一行?,mysql,sql,Mysql,Sql,我的sql数据库有四列,如下所示: A B C D 1038 496 4789 10 1303 496 6678 10 1852 496 1645 8 982 496 5203 8 427 496 5574 8 81 496 6908 7 1264 496 2740 5 1491 496 6408 4 1198 496 9766 3 如您所见,第一行和第二行的B和D列具有相同的值 我只想从这两行中选择一行,其C值较小 第三排、第四排

我的sql数据库有四列,如下所示:

  A   B    C   D
1038 496 4789 10 
1303 496 6678 10 
1852 496 1645  8 
 982 496 5203  8
 427 496 5574  8 
  81 496 6908  7 
1264 496 2740  5 
1491 496 6408  4     
1198 496 9766  3
如您所见,第一行和第二行的
B
D
列具有相同的值

我只想从这两行中选择一行,其
C
值较小


第三排、第四排和第五排也是一样。如何操作?

您可以尝试使用
行号()


如果您的MySQL版本不支持窗口聚合,您可以获得每个B/D的最低C,然后重新加入:

select *
from tab as t
join 
 (
   select b, d, min(c) as minc
   from tab
   group by b, d
 ) as dt
 on t.b = dt.b
and t.c = dt.minc
and t.d = dt.d

当前的排序标准是否定义良好?您当前的查询是否有一个精确的
ORDER BY
子句?请看这是否适用于mysql?因为我得到一个错误。您的SQL语法有一个错误;检查与MySQL服务器版本对应的手册,以了解正确的语法use@SanjayBhatt,你的mysql版本是什么?实际上,我正在hackerrank中解决mysql问题。因此,他们正在使用的版本。
select *
from tab as t
join 
 (
   select b, d, min(c) as minc
   from tab
   group by b, d
 ) as dt
 on t.b = dt.b
and t.c = dt.minc
and t.d = dt.d