Я совершенно новый для Redshift SQL и пытаюсь выяснить, что не так с моим синтаксисом.
Моя задача - объединить 2 таблицы: question
и user
через левое соединение, поскольку я хочу сохранить все значения из question
таблицы.
В настоящий момент он выдает следующее сообщение об ошибке: [Amazon](500310) Invalid operation: This type of correlated subquery pattern is not supported yet;
когда я использую left join
. С другой стороны, когда я меняю код на join
он работает отлично. Я подозреваю, что это связано с тем, что у меня есть агрегированная функция и логическое выражение в моем подзапросе, что делает мое левое соединение внутренним соединением.
Но, как я уже упоминал выше, мне нужно сохранить все значения из табличного question
.
Ниже мой код
select
qa.user_id as user_email,
i.timestamp as session_login_time,
qa.timestamp as question_ask_time,
qa.question_id,
qa.question
from
schema1.question as qa
left join
schema1.user as i
on
qa.user_id = i.email
and
i.timestamp =
(select
max(timestamp)
from schema1.user
where
timestamp <= qa.timestamp)
where user_email <> 'tester' and user_email not like '%tester.com'
group by qa.user_id, i.timestamp, qa.timestamp, qa.question_id, qa.question
Целью подзапроса является получение ближайшего session_login_time
для каждого из question_ask_time
. Таким образом, несколько строк question
могут иметь одно и то же значение session_login_time
.
Может кто-нибудь, пожалуйста, помогите мне определить, что мне не хватает из моего кода выше? Как я могу сделать мои работы с левым соединением?
Спасибо вам большое!
Я предполагаю, что это должно дать вам те же результаты без привлечения дополнительного запроса
select
qa.user_id as user_email,
max(i.timestamp) as session_login_time,
qa.timestamp as question_ask_time,
qa.question_id,
qa.question
from schema1.question as qa
left join schema1.user as i
on qa.user_id = i.email
and i.timestamp <= qa.timestamp
where qa.user_id <> 'tester' and qa.user_id not like '%tester.com'
group by qa.user_id, qa.timestamp, qa.question_id, qa.question