По моему скромному мнению, следующее SQL проблематично c (взято из другого ответа):
select *
from (
select id, ROW_NUMBER() OVER (ORDER BY id) as rownum
from id_f
group by id
) ranked
where ranked.rownum = 1
Этот запрос разбивается на три этапа:
Сначала select id from id_f group by id
, что эквивалентно получению всех отличных id
.
Затем создайте глобальное окно для order by
этих разных идентификаторов и присвойте каждому из них номер строки.
Наконец, фильтр where ranked.rownum = 1
позволяет результирующему набору содержать только одну строку:
minimal_id, 1
Если это действительно все, что вам нужно, использовать min
должно быть намного лучше.
Этот вопрос на первый взгляд не имел для меня особого смысла. Я думаю, что вы ищете, чтобы partition by id
, и в каждом разделе, order by something_else
, а затем выберите строку, ранжированную в первую очередь в этих отдельных разделах. Если, к счастью, мои предположения верны, я бы предложил что-то вроде этого:
select
*
from (
select
*, ROW_NUMBER() OVER (partition by id ORDER BY STH_ELSE) as rownum
from id_f
) ranked
where ranked.rownum = 1