Как получить первые или любые 3 строки всех уникальных идентификаторов? - PullRequest
0 голосов
/ 09 апреля 2020

Таблица образцов

╔════╤═══════╗
║ 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, все равно получите все строки для этого конкретного идентификатора.
Я пытался использовать вложенные селекторы и ограничения, но это не сработало.
MYSQL 5.7

Спасибо

1 Ответ

1 голос
/ 09 апреля 2020

Если вы используете 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

Демо

...