gpt4 book ai didi

oracle - 在 Hive SQL 中为每个 ID 查找 3 分钟组

转载 作者:可可西里 更新时间:2023-11-01 16:42:36 24 4
gpt4 key购买 nike

我有这样的数据,

ID  time
1 9/6/2016 00:01:00
1 9/6/2016 00:01:30
1 9/6/2016 00:02:00
1 9/6/2016 00:04:30
1 9/6/2016 00:05:30
1 9/6/2016 01:05:30
1 9/6/2016 05:05:30
1 9/6/2016 05:06:30
2 9/6/2016 01:55:00
2 9/6/2016 01:56:29
2 9/6/2016 01:57:31
2 9/6/2016 03:55:00
2 9/6/2016 04:13:00
2 9/6/2016 04:15:21

对于每个 ID,我想将一个名为 flag 的新变量设置为 1 并检查时间的第一个值。从第一个时间值开始,我想检查距离第一个条目 3 分钟以内的条目,并将所有内容设置为 1。一旦时间条目超过 3 分钟,我想将标志变量设置为 2,然后再次设置从那时起 3 分钟内检查条目,这需要为每个 ID 继续。我想为每个 ID 找到 3 分钟的组,这样我就可以为每个 ID 形成集合。

我想要的输出是,

ID  time              flag
1 9/6/2016 00:01:00 1
1 9/6/2016 00:01:30 1
1 9/6/2016 00:02:00 1
1 9/6/2016 00:04:30 2
1 9/6/2016 00:05:30 2
1 9/6/2016 01:05:30 2
1 9/6/2016 05:05:30 2
1 9/6/2016 05:06:30 2
2 9/6/2016 01:55:00 1
2 9/6/2016 01:56:29 1
2 9/6/2016 01:57:31 1
2 9/6/2016 03:55:00 2
2 9/6/2016 04:13:00 3
2 9/6/2016 04:15:21 3

此处对于 ID 1,标志设置为 1 并一直检查 3 分钟条目,直到第 3 行,一旦超过 3 分钟,它设置为 2 并再次开始检查 3 分钟条目。对于 ID 2 也是如此。

下面是我试过的,

select ID, time, rank() over (order by time) as rank from table_name;

这是对整个表格的排名。我在想,我们可以为每个 ID 对其进行排名,然后调用第一个值并用剩余值减去它,并在此处编写一个子查询。

有没有更有效的方法来做到这一点?我在这里使用 Hive 查询。任何帮助将不胜感激。

最佳答案

你可以看看 sessonize UDF在 DataFu 中。

此外,还有一篇关于可用的不同选项(hive、pig、python)的好文章 here .

关于oracle - 在 Hive SQL 中为每个 ID 查找 3 分钟组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375298/

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