mysql - 如何从部分不同值的每个子集中仅选择第一行?
问题描述
我的 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 行做同样的事情。怎么做?
解决方案
如果您的 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
推荐阅读
- pine-script - 无法从 pine 编辑器中的函数访问值
- rx-java - 在 Vert.x 中重试 HTTP 调用 N 次,然后返回一个 Maybe
- blazor-webassembly - Blazor wasm 全局路由前缀
- python - 在 Python 中使用 Turtle 模块将缩小的海龟向上移动窗口屏幕
- performance - LightHouse 和 Performance 之间的 LCP 时间 - Google Chrome
- node.js - 使用 TypeScript 的 express-openid-connect
- reactjs - 太多的重新渲染。反应限制(Next JS)
- python - 在 celery 5.0 中,有没有一种方法可以在代码中启动 celery?
- xpages - 运行 Java 的权限问题
- python - 如何计算熊猫中两个时间戳之间的相对时间(以小时为单位)?