首页 > 解决方案 > 如何获得所有客户的前 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 的客户订购。

是否可以通过一个查询获取数据,我该如何获取?

标签: mysqlsql

解决方案


在 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 个客户端,则可以添加外部查询。


推荐阅读