Я знаю, что это очень старо, но подумал, что на это нужно указать.
select car_id, max_version
from (select car_id
, version
, max(version) over (partition by car_id) as max_version
from car ) max_ver
where max_ver.version = max_ver.max_version
Не уверен, почему вы сделали второй вариант таким образом ... в этом случае подвыбор должен быть теоретически медленнее, потому что вы выбираете из той же таблицы 2x и затем объединяете результаты обратно к себе.
Просто удалите версию из встроенного представления, и это одно и то же.
select car_id, max(version) over (partition by car_id) as max_version
from car
Производительность действительно зависит от оптимизатора в этой ситуации, но да, как и в оригинальном ответе, предлагаются встроенные представления, поскольку они дают узкие результаты. Хотя это не очень хороший пример, это та же самая таблица без фильтров в выбранных выборках.
Секционирование также полезно, когда вы выбираете много столбцов, но нуждаетесь в разных агрегатах, которые соответствуют результирующему набору. В противном случае вы вынуждены группировать по каждому другому столбцу.