Użyj ROW_NUMBER()
funkcja do tego:
SELECT *
FROM (select *,ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY item_id) as RowRank
from items_in_groups
)sub
WHERE RowRank <=2
Demo:SQL Fiddle
ROW_NUMBER()
funkcja przypisuje numer do każdego wiersza. PARTITION BY
jest opcjonalne, ale używane do rozpoczęcia numerowania od nowa dla każdej wartości w tej grupie, np.:jeśli PARTITION BY group_id
następnie dla każdego unikalnego group_id
wartość numeracja zacznie się od nowa od 1. ORDER BY
oczywiście służy do określenia, jak powinno przebiegać zliczanie i jest wymagane w ROW_NUMBER()
funkcja.