Коррелированный подзапрос в Exasol

Я пытаюсь написать подзапрос с использованием SQL в базе данных Exasol. Проблема аналогична этой теме (SQL-запрос - присоединяйтесь меньше чем или равная дата), и код хорошо работает в mysql и postgres. Однако, когда я перемещаю код в Exasol, появляется сообщение «Ошибка SQL 42000: корреляция в предложении on». Интересно, есть ли альтернативное решение этой проблемы или как я могу исправить это в 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
           );

person xkeecs    schedule 22.02.2020    source источник
comment
поддерживает ли Exasol коррелированный подзапрос?   -  person xkeecs    schedule 22.02.2020


Ответы (1)


Хотя коррелированные запросы не поддерживаются в 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
person Eralper    schedule 26.02.2020