在 MySQL 中,可以通过使用窗口函数 ROW_NUMBER() 来获取分组后的第一条记录。ROW_NUMBER() 函数返回当前行在分组中的行号,值为 1 的行即为该组的第一条记录。
以下是一般语法:
SELECT *, ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY order_column) AS row_num
FROM table_name;
ROW_NUMBER() 函数的语法如下:
ROW_NUMBER() OVER (PARTITION BY partition_column ORDER BY order_column)
示例:
获取 orders 表中每个客户的第一个订单:
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num
FROM orders;
结果:
| order_id | customer_id | order_date | row_num |
|---|---|---|---|
| 1 | 10 | 2023-01-01 | 1 |
| 2 | 20 | 2023-01-02 | 1 |
| 3 | 10 | 2023-01-03 | 2 |
| 4 | 20 | 2023-01-04 | 2 |
获取分组后的第一条记录后,可以使用 WHERE 子句过滤出 row_num 为 1 的行:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY order_column) AS row_num
FROM table_name
) AS subquery
WHERE row_num = 1;
示例:
获取 orders 表中每个客户的第一个订单的详细数据:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num
FROM orders
) AS subquery
WHERE row_num = 1;
order_column 中有多个值相等,则最早插入的行将被视为第一行。ORDER BY 子句,ROW_NUMBER() 函数将按照插入顺序返回行号。RANK() 和 DENSE_RANK(),来实现类似的功能。以上就是mysql如何取分组后第一个的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: mysql如何取分组后第一个
本文链接: https://www.lsjlt.com/wiki/f8e4fd3953.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0