Подзапрос Vertica с ограничением

Я обнаружил проблему при написании подзапроса с limit 1 для получения верхней записи.

Вот пример моей проблемы.

Мастер таблиц(id,set)

введите здесь описание изображения

Сведения о таблице(id,set,code)

введите здесь описание изображения

я пытаюсь получить последний код для каждого набора в таблице Master.

Ниже приведен запрос, который я пробовал, но получил ошибку, что ограничение 1 не поддерживается для коррелированных подзапросов и должно содержать предложение GROUP By.

select id,set,(select code from detail where set=master.set order by id desc limit 1) from master;

И результат будет как

введите здесь описание изображения

пожалуйста, помогите мне, если это не так, я новичок в этой базе данных vertica.

спасибо.


person Mask    schedule 30.10.2013    source источник


Ответы (1)


Я не уверен в этой конкретной ошибке, но вы можете использовать аналитическую функцию rank() для получения таких результатов:

select id, set, code from (
    select M.id, D.set, D.code, rank() over (partition by D.set order by D.id desc) as rank
    from detail as D 
    right outer join master as M 
        on D.set = M.set) as ranks 
where rank = 1 
order by id;

Внутренний подзапрос использует функцию rank() для присвоения ранга каждой строке в наборе. Внешний запрос просто выбирает строки с рангом 1.

person Aniket Schneider    schedule 31.10.2013
comment
Правильно, вы можете использовать rank() или row_number() - person mauro; 07.07.2016