ROW_NUMBER () с предложением Qualify в Vertica

select a.pm_id, a.pm_name
from loc_table a
qualify row_number() over(partition by pm_id order by pm_name asc) =1;

Можем ли мы написать это так в Vertica, я пробовал, но ключевое слово qualify не используется Vertica, и предложение from должно быть в конце. Может ли кто-нибудь объяснить, что делает вышеуказанный запрос и как мы можем добиться того же в Vertica.


person nodev_101    schedule 13.08.2020    source источник


Ответы (2)


Vertica не имеет предложения QUALIFY.

Что у него есть, так это условие о пределе аналитики

Перепишите свой запрос, как показано ниже, и запустите простой глобальный поиск-замену, если вам это нужно часто:

SELECT 
  a.pm_id
, a.pm_name
FROM loc_table a
LIMIT 1 OVER(PARTITION BY pm_id ORDER BY pm_name ASC);
person marcothesane    schedule 14.08.2020

Я думаю, вам нужен подзапрос в Vertica:

select pm_id, pm_name
from (select l.pm_id, l.pm_name,
             row_number() over (partition by pm_id order by pm_name asc) as seqnum
      from loc_table l
     ) l
where seqnum = 1;

Это в значительной степени именно то, что делает qualify. Подобно having фильтрам по столбцам агрегации, qualify фильтрам оконных функций.

person Gordon Linoff    schedule 13.08.2020
comment
На самом деле я должен реализовать с оговоркой. не могли бы вы помочь мне достичь с оговоркой - person nodev_101; 13.08.2020
comment
@ nodev_101. . . Затем используйте базу данных, такую ​​как Teradata, которая поддерживает это предложение. Вы не можете использовать то, что не поддерживается используемой базой данных. - person Gordon Linoff; 13.08.2020