Для PostgreSQL 8.4, у которого локальных переменных нет, можно так:
select * from (select *, rank() over (partition by cid order by id) as _gidx from somedata) t where _gidx<=5 order by cid, id
Работает быстрее варианта с limit (хотя вариант с union всё равно быстрее); более удобно в использовании, если выборка делается не из таблицы, а по результатам сложного подзапроса. Минусы — нужен postgresql 8.4.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
select * from (select *, rank() over (partition by cid order by id) as _gidx from somedata) t where _gidx<=5 order by cid, id
Работает быстрее варианта с limit (хотя вариант с union всё равно быстрее); более удобно в использовании, если выборка делается не из таблицы, а по результатам сложного подзапроса. Минусы — нужен postgresql 8.4.