Usa el ROW_NUMBER()
función para esto:
SELECT *
FROM (select *,ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY item_id) as RowRank
from items_in_groups
)sub
WHERE RowRank <=2
Demostración:SQL Fiddle
El ROW_NUMBER()
función asigna un número a cada fila. PARTITION BY
es opcional, pero se usa para comenzar la numeración de cada valor en ese grupo, es decir:si PARTITION BY group_id
luego para cada group_id
único valor la numeración comenzaría de nuevo en 1. ORDER BY
por supuesto, se usa para definir cómo debe ir el conteo, y se requiere en el ROW_NUMBER()
función.