首页 > 解决方案 > 如何获取所有唯一 ID 的第一行或任意 3 行?

问题描述

样品表

╔════╤═══════╗
║ id │ value ║
╠════╪═══════╣
║ 1  │ a     ║
╟────┼───────╢
║ 1  │ b     ║
╟────┼───────╢
║ 1  │ c     ║
╟────┼───────╢
║ 1  │ d     ║
╟────┼───────╢
║ 2  │ e     ║
╟────┼───────╢
║ 2  │ f     ║
╟────┼───────╢

预期产出

╔════╤═══════╗
║ id │ value ║
╠════╪═══════╣
║ 1  │ a     ║
╟────┼───────╢
║ 1  │ b     ║
╟────┼───────╢
║ 1  │ c     ║
╟────┼───────╢
║ 2  │ e     ║
╟────┼───────╢
║ 2  │ f     ║
╟────┼───────╢

像这样的东西。如果值少于 3 个,仍然获取该特定 ID 的任何行。
我尝试使用嵌套选择和限制,但没有奏效。
MYSQL 5.7

谢谢

标签: mysql-5.7

解决方案


如果您使用的是 MySQL 8+,那么ROW_NUMBER可以在这里工作:

WITH cte AS (
    SELECT id, value, ROW_NUMBER() OVER (PARTITION BY id ORDER BY value) rn
    FROM yourTable
)

SELECT id, value
FROM cte
WHERE rn <= 3
ORDER BY id, value;

下面演示链接的屏幕截图

演示


推荐阅读