В предыдущий пост кто-то помог мне с подзапросом. Теперь я хочу добавить к запросу, но получаю сообщение об ошибке. (Я все еще изучаю правила работы с подзапросами.)
Обновленный SQL ниже. Ошибка:
[Amazon](500310) Invalid operation: invalid reference to FROM-clause entry for table "application_stages";
SELECT t1.*, applications.status, applications.stage_name
FROM application_stages t1
JOIN (
select application_id, max(exited_on) as exited_on
from application_stages
group by application_id
) t2
USING (application_id,exited_on)
join applications on application_stages.application_id = applications.id
where application_id in ('91649746', '91991364', '96444221')
Используйте для этого оконные функции:
select ast.*, a.status, a.stage_name
from (select ast.*,
rank() over (partition by application_id order by exited_on desc) as seqnum
from application_stages ast
) ast join
applications a
on ast.application_id = a.id
where ast.seqnum = 1 and
ast.application_id in ('91649746', '91991364', '96444221');
В вашем запросе есть несколько проблем:
application_id
в where
неоднозначенapplication_stages
имеет псевдоним t1
, поэтому первый не распознаетсяОбратите внимание: если application_id
- это число (что, как я предполагаю, так и есть), то константы не должны иметь одинарных кавычек).
@WilsonS. . . Для этого настоятельно рекомендуются оконные функции.
Когда вы назначаете псевдонимы, вам необходимо последовательно использовать их во всех предложениях и избегать неоднозначности столбцов с одинаковыми именами в других таблицах. Рассмотрим следующую настройку
SELECT s.*, a.status, a.stage_name
FROM application_stages s
JOIN (
select application_id, max(exited_on) as exited_on
from application_stages
group by application_id
) m
USING (application_id, exited_on)
JOIN applications a ON a.application_id = s.id
WHERE a.application_id IN ('91649746', '91991364', '96444221')
Спасибо, @Gordon Linoff. Можно ли настроить исходный запрос без преобразования в функцию Windows? Я добавлю имя таблицы в application_id и уберу одинарные кавычки из application_ids.