Я новичок в Redshift. У меня есть две таблицы, ticket_booking и ticket_review, отношение двух таблиц одно - много. Что в сочетании выглядит так:
Результат, который я ищу (я хочу получить наибольшее число для идентификатора ticket_booking):
Я попытался получить желаемый результат, используя группу по команде, чтобы помочь отдельным записям. См. сценарий ниже:
select b.id, r.id, max(r.number) as revision_number
from dw.ticket_review as r, dw.ticket_booking as b
where r.ticket_booking_id = b.id
group by b.id
Однако я получаю сообщение об ошибке столбец "r.id" должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции.. Если я это сделаю, я получу результат первой картинки. Я пробовал разные подходы, упомянутые в разных вопросах, но ни один из них не помог мне в моей ситуации. Любая помощь будет глубоко оценена! :)
Красное смещение, но разве красное смещение не основано на Postgres? по крайней мере я так понял.
Нет, он никогда не был «основан» на Postgres. Amazon использовал только парсер SQL, все остальное по сути другое. И даже если они использовали больше этого, оба существенно разошлись.
Ох! хорошо, да, это имеет смысл, я снял бирку. Спасибо за пояснение! :)
Вы получаете сообщение об ошибке, потому что вам нужны и b.id
, и r.id
в предложении GROUP BY
. Например. GROUP BY b.id, r.id
Привет, Рикардо, к сожалению, если я включу r.id в предложение GROUP BY, то я получу результат, показанный на первом рисунке. Я думаю, что подзапрос - это способ, но я еще не могу понять это. Спасибо за комментарий :)
Для каждого бронирования назначьте порядок номер строки из самого высокого отзыва, а затем выберите только первые строки:
select booking_id, ticket_review, number
from (select b.id as booking_id, r.id as ticket_review, r.number,
row_number() over (partition by b.id order by r.id desc) rn
from dw.ticket_review as r, dw.ticket_booking as b
where r.ticket_booking_id = b.id) x
where rn = 1;
Kombajn Я не могу отблагодарить вас в достаточной мере. Это сработало блестяще!
Красное смещение или Постгрес? Это два очень разных продукта баз данных.