Как сделать эквивалент «предельного значения»? - PullRequest
2 голосов
/ 30 декабря 2008

Как я могу ограничить результирующий набор n различными значениями данного столбца (столбцов), где фактическое количество строк может быть больше?

Таблица ввода:

client_id, employer_id, other_value
1, 2, abc
1, 3, defg
2, 3, dkfjh
3, 1, ldkfjkj
4, 4, dlkfjk
4, 5, 342
4, 6, dkj
5, 1, dlkfj
6, 1, 34kjf
7, 7, 34kjf
8, 6, lkjkj
8, 7, 23kj

желаемый результат, где предел различен = 5 различных значений client_id:

1, 2, abc
1, 3, defg
2, 3, dkfjh
3, 1, ldkfjkj
4, 4, dlkfjk
4, 5, 342
4, 6, dkj
5, 1, dlkfj

Платформа, для которой она предназначена, - MySQL.

Ответы [ 2 ]

12 голосов
/ 30 декабря 2008

Вы можете использовать подвыбор

select * from table where client_id in 
(select distinct client_id from table order by client_id limit 5)
0 голосов
/ 30 декабря 2008

Это для SQL Server. Я не помню, MySQL может использовать ключевое слово LIMIT вместо TOP. Это может сделать запрос более эффективным, если вы можете избавиться от самого внутреннего подзапроса, используя LIMIT и DISTINCT в одном и том же подзапросе. (Похоже, Винко использовал этот метод, и LIMIT верен. Я оставлю это здесь для второго возможного ответа.)

SELECT
     client_id,
     employer_id,
     other_value
FROM
     MyTable
WHERE
     client_id IN
     (
          SELECT TOP 5
               client_id
          FROM
          (
               SELECT DISTINCT
                    client_id
               FROM
                    MyTable
          ) SQ
          ORDER BY
               client_id
     )

Конечно, добавьте свое собственное предложение WHERE и предложение ORDER BY в подзапрос.

Другая возможность (сравните производительность и посмотрите, какая работает лучше):

SELECT
     client_id,
     employer_id,
     other_value
FROM
     MyTable T1
WHERE
     T1.code IN
     (
          SELECT
               T2.code
          FROM
               MyTable T2
          WHERE
               (SELECT COUNT(*) FROM MyTable T3 WHERE T3,code < T2.code) < 5
     )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...