Impala SQL 查询

Posted

技术标签:

【中文标题】Impala SQL 查询【英文标题】:Impala SQL Query 【发布时间】:2020-12-21 01:46:06 【问题描述】:

错误信息:

选择列表表达式不是由聚合输出生成的(缺少 来自 GROUP BY 子句?): CASE WHEN (flag = 1) THEN date_add(lead_ctxdt, -1) ELSE ctx_date END lot_endt

代码:

select c.enrolid, c.ctx_date, c.ctx_regimen, c.lead_ctx, c.lead_ctxdt, min(c.ctx_date) as lot_stdt, 
case when (flag = 1 ) then date_add(lead_ctxdt, -1) 
else ctx_date
end as lot_endt
from
(
    select p.*, 
    case when (ctx_regimen <> lead_ctx) then 1 
    else 0
    end as flag
    from
    (
        select a.*, lead(a.ctx_regimen, 1) over(partition by enrolid order by ctx_date) as lead_ctx, 
        lead(ctx_date, 1) over (partition by enrolid order by ctx_date) as lead_ctxdt
        from 
        (
            select enrolid, ctx_date, group_concat(distinct ctx_codes) as ctx_regimen
            from lotinfo 
            where ctx_date between ctx_date and date_add(ctx_date, 5)
            group by enrolid, ctx_date
        ) as a
   ) as p
) as c
group by c.enrolid, c.ctx_date, c.ctx_regimen, c.lead_ctx, c.lead_ctxdt

我想得到lead_ctx日期减一作为标志为1的日期

【问题讨论】:

取决于你想要什么,尝试应用聚合函数:MIN/MAX(case when (flag = 1 ) then date_add(lead_ctxdt, -1) else ctx_date end) @dnoeth; 我想得到lead_ctx 日期减一作为标志为1 的日期。我想你在这里确实有答案。可能,每组只有一行启用了该标志。 这看起来像是一个有趣的查询,可能与间隙和孤岛问题有关。如果您要以表格文本的形式提供示例数据和所需结果,则可以进一步优化它。 【参考方案1】:

所以我通过执行几次小改动找到了答案。让我告诉你,当你试图在同一个查询中有 group_conact 的同时尝试最小或最大时,在 Impala 中这不起作用。您必须在每一个子查询和外部查询中的某些内容的 min() 中编写两个查询,反之亦然。

感谢@dnoeth 让我明白我已经有了答案。

【讨论】:

以上是关于Impala SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

impala 小记

impala

Cloudera Impala 查询中的 SQL 参数

实战kudu集成impala

什么是impala,如何安装使用Impala

什么是impala,如何安装使用Impala