#sql #vertica
#sql #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.
Ответ №1:
В Vertica нет QUALIFY
предложения.
Что у него действительно есть, так это предложение analytical limit
Перепишите свой запрос, как показано ниже, и запустите простой глобальный поиск -заменяйте, если вам это часто нужно:
SELECT
a.pm_id
, a.pm_name
FROM loc_table a
LIMIT 1 OVER(PARTITION BY pm_id ORDER BY pm_name ASC);
Ответ №2:
Я думаю, вам нужен подзапрос в 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
фильтры для оконных функций.
Комментарии:
1. На самом деле я должен реализовать с предложением qualify. можете ли вы, пожалуйста, помочь мне достичь с помощью предложения qualify
2. @nodev_101 . . . Затем используйте базу данных, такую как Teradata, которая поддерживает это предложение. Вы не можете использовать что-то, что не поддерживается используемой вами базой данных.