Usa il ROW_NUMBER()
funzione per questo:
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
Il ROW_NUMBER()
La funzione assegna un numero a ciascuna riga. PARTITION BY
è facoltativo, ma utilizzato per ricominciare la numerazione per ogni valore in quel gruppo, cioè:se PARTITION BY group_id
quindi per ogni group_id
univoco valore la numerazione ricomincerebbe da 1. ORDER BY
ovviamente viene utilizzato per definire come dovrebbe andare il conteggio ed è richiesto in ROW_NUMBER()
funzione.