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.