Använd ROW_NUMBER()
funktion för detta:
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
Den ROW_NUMBER()
funktionen tilldelar ett nummer till varje rad. PARTITION BY
är valfritt, men används för att starta om numreringen för varje värde i den gruppen, dvs:om du PARTITION BY group_id
sedan för varje unikt group_id
värde numreringen skulle börja om på 1. ORDER BY
används naturligtvis för att definiera hur räkningen ska gå, och krävs i ROW_NUMBER()
funktion.