Use o
ROW_NUMBER()
função para isso:SELECT *
FROM (select *,ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY item_id) as RowRank
from items_in_groups
)sub
WHERE RowRank <=2
Demonstração:SQL Fiddle
O
ROW_NUMBER()
função atribui um número a cada linha. PARTITION BY
é opcional, mas usado para iniciar a numeração para cada valor nesse grupo, ou seja:se você PARTITION BY group_id
então, para cada group_id
exclusivo valor a numeração começaria em 1. ORDER BY
é claro que é usado para definir como a contagem deve ser feita e é necessário no ROW_NUMBER()
função.