样品表
╔════╤═══════╗
║ 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 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;