gpt4 book ai didi

hadoop - Impala查询以获取下一个日期

转载 作者:行者123 更新时间:2023-12-02 18:28:07 25 4
gpt4 key购买 nike

我有2个Impala表。

第一个表T1(还有其他列,但我只对日期和日期类型感兴趣,如工作日):

date       day_type
04/01/2020 Weekday
04/02/2020 Weekday
04/03/2020 Weekday
04/04/2020 Weekend
04/05/2020 Weekend
04/06/2020 Weekday

第二表T2:
process date       status
A 04/01/2020 finished
A 04/02/2020 finished
A 04/03/2020 finished
A 04/03/2020 run_again

使用Impala查询,我必须从第二个表T2获取最大日期并获取其状态。根据上表,04/03是最大日期。
如果状态在04/03完成,则我的查询应返回T1的下一个可用工作日日期,即04/06/2020。
但是,如果状态为 run_again,则查询应返回相同的日期。
在上表中,04/03具有 run_again,当我的查询运行时,输出应为04/03/2020而不是04/06/2020。
请注意,一个日期可能有多个状态。例如,04/03/2020可以有一行以完成状态作为状态,另一行以运行状态作为状态。在这种情况下,应再次确定运行的优先级,并且查询应给出04/03/2020作为输出日期

到目前为止我尝试过的是:
我从第二个表运行了一个子查询,并获得了最大日期及其状态。我试图在主查询中运行一个案例,并在Case语句中将T1作为子选择提供给它,但它不起作用。

是否可以通过Impala查询来实现?

最佳答案

一种方法是从表T1中创建CTE,而不是相关子查询。就像是:

WITH T3 as (
select t.date date, min(x.date) next_workday
from T1 t join T1 x
on t.date < x.date
where x.day_type = 'Weekday'
group by t.date
)
select T2.process, T2.date run_date, T2.status,
case when T2.status = 'finished' then T3.next_workday
else T3.date
end next_run_date
from T2 join T3
on T2.date = T3.date
order by T2.process, T2.date;
+---------+------------+-----------+---------------+
| process | run_date | status | next_run_date |
+---------+------------+-----------+---------------+
| A | 2020-04-01 | finished | 2020-04-02 |
| A | 2020-04-02 | finished | 2020-04-03 |
| A | 2020-04-03 | run again | 2020-04-03 |
+---------+------------+-----------+---------------+

然后,您可以从结果中选择最大而不是排序。

关于hadoop - Impala查询以获取下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61361429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com