Переписать коррелированный подзапрос, выброс Redshift Этот тип шаблона коррелированного подзапроса пока не поддерживается Ошибка - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над запросом, который должен покинуть соединение таблицы A с таблицей B на A.user_id = B.user_id, а B.day меньше A.day, но ближе всего к A.day.

Вот что я написал:

Select A.user_id, A.date, b1.v1 from A
Left Join B as b1
on A.user_id=b1.user_id and b1.day=(Select max(day) from B as b2 where b2.user_id=A.user_id
and b2.day < A.day)

Я делаю это в python, используя psycopg2, и он возвращает ошибку: This type of correlated subquery pattern is not supported yet.

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

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Один из способов сделать это:

Select A.user_id, A.date, b1.v1, max(b1.day) 
from A Left Join B as b1 on A.user_id=b1.user_id and b1.day < A.day 
group by A.user_id, A.date, b1.v1;
0 голосов
/ 29 мая 2020

Один метод довольно дорогой, но. . . :

select . . .
from (select A.user_id, A.date, b1.v1,
             row_number() over (partition by a.user_id, a.date order by b.day desc) as seqnum
      from A Left Join
           B 
          on A.user_id = b1.user_id and b.day < a.day
     ) ab
where seqnum = 1;

Могут быть другие способы sh этого - и которые имеют лучшую производительность. Если это необходимо, задайте новый вопрос, предоставьте образцы данных, желаемые результаты и четкое объяснение logi c, которое вы хотите реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...