Filtrado por RANK () en la cláusula HAVING sin subconsultas

Estoy buscando máximos grupales (eldata CTE emula un conjunto de combinaciones de tablas reales):

with data as (
    select 'Austria' as country, 1 as id, 'red' as colour, 120 as quantity
    union all select 'Austria', 2, 'green', 96
    union all select 'Austria', 3, 'blue', 103

    union all select 'Belgium', 1, 'red', 33
    union all select 'Belgium', 2, 'green', 12
    union all select 'Belgium', 3, 'blue', 40
)
select country, colour, quantity
from (
    select country, colour, quantity,
    rank() over (partition by country order by quantity desc, id) as position
    from data
    group by country, id, colour, quantity
) subquery
where position=1;

Esto funciona bien pero me veo obligado a ajustar la consulta con elRANK() llamar dentro de una subconsulta, porque esta alternativa desencadena un error de sintaxis:

-- [...]
select country, colour, quantity,
rank() over (partition by country order by quantity desc, id) as position
from data
group by country, id, colour, quantity
having rank() over (partition by country order by quantity desc, id)=1;

Las funciones en ventana solo pueden aparecer en las cláusulas SELECT u ORDER BY.

¿Existe una sintaxis alternativa para evitar esta limitación o la subconsulta es la única forma sensata?

El objetivo final es integrar este código en un conjunto más grande de expresiones SQL generadas dinámicamente. Si puedo mantener una sola consulta, puedo definir las diferentes partes (seleccionar, tablas unidas, dónde, agrupar, tener y ordenar por) con matrices. De lo contrario, tengo que pensar una gran reescritura.

Respuestas a la pregunta(2)

Su respuesta a la pregunta