我尝试在Exasol数据库中使用SQL编写一个子查询。这个问题类似于这个线程(SQL Query - join on less than or equal date),代码在mysql和postgres中运行良好。但是,当我将代码移到Exasol时,它显示SQL Error 42000: correlation in 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
);发布于 2020-02-26 20:18:22
尽管Exasol上不支持相关查询,但可以使用DENSE_RANK() SQL function解决此要求,如下所示
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 = 1https://stackoverflow.com/questions/60348865
复制相似问题