Мне кажется, что работает следующее:
SELECT DISTINCT
group,
first_value(foo) OVER (PARTITION BY group ORDER BY foo = 'A' DESC) 'foo',
first_value(value) OVER (PARTITION BY group ORDER BY foo = 'A' DESC) 'value'
FROM ...
Если мне нужно указать критерии, по которым можно выбрать запасную строку, я могу сделать это, расширив предложение ORDER BY
, например.ORDER BY foo = 'A' DESC, foo ASC
.