【问题标题】:Correlated subquery in ExasolExasol 中的相关子查询
【发布时间】:2020-06-06 11:40:19
【问题描述】:

我尝试在 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
           );

【问题讨论】:

  • Exasol 是否支持相关子查询?

标签: mysql exasolution exasol


【解决方案1】:

虽然 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 = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多