-- 假设我们有一个名为 `orders` 的表,其中包含 `customer_id` 和 `order_date` 列。
-- 我们希望按 `customer_id` 分组,并从每组中取出最近的 10 条记录。
WITH RankedOrders AS (
SELECT
customer_id,
order_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
FROM orders
)
SELECT
customer_id,
order_date
FROM RankedOrders
WHERE rn <= 10;
ROW_NUMBER():我们使用窗口函数 ROW_NUMBER() 来为每个 customer_id 分组中的记录分配一个行号。PARTITION BY customer_id 表示按 customer_id 分组,而 ORDER BY order_date DESC 表示按 order_date 降序排列(即最近的记录排在前面)。WITH 子句) 来创建一个临时结果集 RankedOrders,其中包含了每个分组中的记录及其对应的行号。WHERE rn <= 10 来筛选出每个分组中行号小于等于 10 的记录,即每组取前 10 条记录。如果你需要对其他表或列进行类似的操作,只需替换表名和列名即可。
上一篇:mysql print
下一篇:mysql建表语句带注释
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站