如何获得所有唯一ID的第一行或任意三行?

问题描述 投票:0回答:1

样品表

╔════╤═══════╗
║ 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

谢谢

windows mysql-5.7
1个回答
0
投票

如果您使用的是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;

screen capture of demo link below

Demo

© www.soinside.com 2019 - 2024. All rights reserved.