在 SQL 中,可以使用子查询和 ROW_NUMBER() 函数来获取分组后每组的前几条记录。
下面是一种常见的实现方式,假设有一个名为 orders 的表,其中有三个列:order_id,customer_id 和 order_date。我们想要按 customer_id 分组,并仅获取每个组的前三个最新订单。
SELECT order_id, customer_id, order_date
FROM (
SELECT order_id, customer_id, order_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS row_num
FROM orders
) AS t
WHERE row_num <= 3;
这个查询中,内部的子查询使用了 ROW_NUMBER() 函数,并根据每个客户的订单日期排序,将每个客户的最新订单排在前面。然后,外部查询筛选出每个分组中排名前三的订单记录。
需要注意的是,如果使用其他聚合函数(如 SUM、AVG、COUNT 等)对分组进行操作,应将它们嵌套在子查询中,并在外部查询中使用筛选条件来限制结果。