可以使用子查询和JOIN来实现先分组再从每个分组中取前10条记录。
例如,假设有一个表格orders,其中包含订单号、客户姓名和订单金额三列,要查询每个客户的订单金额最高的前3笔订单:
SELECT o1.*
FROM orders AS o1
JOIN (
SELECT customer, MAX(amount) AS max_amount
FROM orders
GROUP BY customer
) AS o2
ON o1.customer = o2.customer AND o1.amount >= o2.max_amount - 9
ORDER BY customer, amount DESC;
这里首先在子查询中按照客户分组,并求出每个分组中的最大订单金额,然后将结果与原始表格进行JOIN操作,筛选出每个客户的前10笔订单。注意,在确定每个分组中的前N条记录时,需要对max_amount减去N-1得到一个区间值,并将其作为o1.amount与o2.max_amount进行比较。同时,在ORDER BY子句中需要按照customer和amount两列进行排序。