hive 根据跟踪的状态更改生成时间戳列

efzxgjgh  于 2023-04-20  发布在  Hive
关注(0)|答案(1)|浏览(127)

我在Hive中有一个表,如下所示:
| 身份证|国家|时间戳|
| --------------|--------------|--------------|
| A|1|2022-01-01 23:01|
| A|0|2022-02-13 09:00|
| A|1|2022-04-04 11:21|
| A|0|2022-04-15 09:32|
| A|0|2022-04-27 10:05|
| B|1|2022-02-03 04:51|
| B|0|2022-02-14 05:01|
我需要输出两个新列,'actioned'和'completed'。列actioned将是state = 1的地方,而completed将是state = 0的地方。因此,从上表中,我想创建以下输出:
| 身份证|行动的|已完成|
| --------------|--------------|--------------|
| A|2022-01-01 23:01|2022-02-13 09:00|
| A|2022-04-04 11:21|2022-04-15 09:32|
| B|2022-02-03 04:51|2022-02-14 05:01|
做这件事最有效的方法是什么?

6ss1mwsb

6ss1mwsb1#

你可以使用窗口函数来识别在同一个id上从状态1(已执行)到0(已完成)的转换。下面是一个使用lead()的方法:

select id, timestamp actioned, lead_timestamp completed
from (
    select t.*,
        lead(state)     over(partition by id order by timestamp) lead_state,
        lead(timestamp) over(partition by id order by timestamp) lead_timestamp
    from mytable t
) t
where state = 1 and lead_state = 0

相关问题