Mysql 如何仅从部分不同值的每个子集中选择第一行?
我的sql数据库有四列,如下所示: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值较小 第三排、第四排
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