0

我尝试在 Exasol 数据库中使用 SQL 编写子查询。问题类似于这个线程(SQL Query - join on less than or equal date)并且代码在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
           );
4

1 回答 1

0

虽然 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
于 2020-02-26T12:18:22.293 回答