Използвайте ROW_NUMBER()
функция за това:
SELECT *
FROM (select *,ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY item_id) as RowRank
from items_in_groups
)sub
WHERE RowRank <=2
Демонстрация:SQL Fiddle
ROW_NUMBER()
функцията присвоява номер на всеки ред. PARTITION BY
не е задължително, но се използва за започване на номерирането отначало за всяка стойност в тази група, т.е.:ако PARTITION BY group_id
след това за всеки уникален group_id
стойност, номерирането ще започне отначало от 1. ORDER BY
разбира се се използва за определяне на начина, по който трябва да върви броенето и се изисква в ROW_NUMBER()
функция.