Pro n=2 můžete
SELECT max(column1) m
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1)
WHERE column2 = t.column2)
pro jakékoli n můžete použít postupy popsané zde k simulaci pořadí nad oddílem.
EDIT:Ve skutečnosti toto článek vám poskytne přesně to, co potřebujete.
V podstatě je to něco takového
SELECT t.*
FROM
(SELECT grouper,
(SELECT val
FROM table li
WHERE li.grouper = dlo.grouper
ORDER BY
li.grouper, li.val DESC
LIMIT 2,1) AS mid
FROM
(
SELECT DISTINCT grouper
FROM table
) dlo
) lo, table t
WHERE t.grouper = lo.grouper
AND t.val > lo.mid
Nahraďte grouper
s názvem sloupce, podle kterého chcete seskupit, a val
s názvem sloupce, který obsahuje hodnoty.
Chcete-li zjistit, jak přesně to funguje, postupujte krok za krokem od nejvnitřnějšího dotazu a spusťte je.
Také je zde mírné zjednodušení – poddotaz, který najde mid
může vrátit NULL, pokud určitá kategorie nemá dostatek hodnot, takže by to mělo být KOALESCE s nějakou konstantou, která by dávala smysl při porovnání (ve vašem případě by to bylo MIN domény hodnoty, v článku je to MAX).
EDIT2: Zapomněl jsem zmínit, že je to LIMIT 2,1, který určuje n (LIMIT n,1).