mysql - 如何获得所有客户的前 3 个订单?
问题描述
我在 MySQL 数据库中有 2 个表。
tbl_clients
id | name
1 | Mike
2 | John
3 | Dave
.........
N | N
tbl_orders
id | order_date | price | client_id
1 | 2018-03-19 | 1000 | 1
2 | 2018-03-19 | 5000 | 2
3 | 2018-05-19 | 3000 | 3
................
N | N | N | N
在我的任务中,出于某些统计原因,我需要接受前 3 个订单,由 id = 2 和 3 的客户订购。
是否可以通过一个查询获取数据,我该如何获取?
解决方案
在 MySQL 8.0 中,您可以简单地使用row_number()
. 早期版本中的一个选项是相关子查询——假设order_date
是唯一的:
select o.*
from tbl_orders o
where o.order_date <= (select o2.order_date
from tbl_orders o2
where o2.client_id = o.client_id
order by o2.order_date asc
limit 2, 1
);
where o.client_id in (2, 3)
如果您真的想将其限制为仅 2 个客户端,则可以添加外部查询。
推荐阅读
- sapui5 - sap.ui.table.Table 中的单选单选按钮
- angular - 使用 Mat 对话框在 Angular 中单元测试失败
- ios - Xamarine Shell TitleView 按钮在 iOS 中消失
- c# - 如何将此特定 SQL 语句转换为 LINQ
- visual-studio - 如何克服要求方法/类必须公开的 VS“创建单元测试”限制?
- identityserver4 - 身份服务器 4 中使用哪种令牌类型?
- python - Manytomanyfields 问题:获取应用了 manytomanyfield 的列
- facebook-ads-api - Facebook 广告 API 的参数和故障兼容性?
- javascript - 通过使用 vanilla JavaScript 定位 div 来多重包装 div
- java - Tomcat 8.5 不在 IntelliJ 中运行