首页 > 解决方案 > 如何从部分不同值的每个子集中仅选择第一行?

问题描述

我的 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价值较小的一行。

我想对第 3 4 和第 5 行做同样的事情。怎么做?

标签: mysqlsql

解决方案


如果您的 MySQL 版本不支持Windowed Aggregates,您可以获得每个 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

推荐阅读