Коррелированный подзапрос в Exasol - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь написать подзапрос, используя SQL в базе данных Exasol. Проблема схожа с этим потоком (SQL Запрос - объединение на дату, меньшую или равную ), и код хорошо работает в mysql и postgres. Однако, когда я перемещаю код в Exasol, он говорит: SQL Ошибка 42000: корреляция в предложении. Интересно, есть ли альтернативное решение этой проблемы или как я могу исправить это в Exasol?

    SELECT a.ID, 
           a.join_date,
           a.country, 
           a.email,
           b.start_date,
           b.joined_from
      FROM a 
 LEFT JOIN b 
        ON a.country = b.country 
       AND b.start_date = (
           SELECT MAX(start_date) 
             FROM b b2 
            WHERE b2.country = a.country 
              AND b2.start_date <= a.join_date
           );

1 Ответ

0 голосов
/ 26 февраля 2020

Хотя коррелированные запросы не поддерживаются в Exasol, выполнить требование можно с помощью DENSE_RANK () SQL функция следующим образом

with cte as (
        select
               a.ID, a.join_date, a.country, a.email, b.start_date, b.joined_from,
               dense_rank() over (partition by b.country order by b.start_date desc) r1
        from a
        left join b
                on a.country = b.country
)
select * from cte where r1 = 1
...