Redshift - SQL Left Join не работает с коррелированным подзапросом и агрегированной функцией

0

Я совершенно новый для 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.

Может кто-нибудь, пожалуйста, помогите мне определить, что мне не хватает из моего кода выше? Как я могу сделать мои работы с левым соединением?

Спасибо вам большое!

Теги:
join
amazon-redshift
left-join

1 ответ

2
Лучший ответ

Я предполагаю, что это должно дать вам те же результаты без привлечения дополнительного запроса

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню