我有一个由两列组成的表,即时间和值列。 time列是一个浮点值,该值是一个字符串值。
我想将具有相同值的所有行组合在一起,其中时间列中两个值之间的距离最大为0.001并返回这些组的间隔。
实施例: 我的表格如下:
====================
| time | value |
====================
| 0.001 | a |
| 0.00001| a |
| 0.002 | a |
| 0.002 | b |
| 0.003 | b |
| 0.0031 | a |
====================
期望的结果:
======================================
| time_min | time_max | value |
======================================
| 0.001 | 0.002 | a |
| 0.002 | 0.003 | b |
| 0.0031 | 0.0031 | a |
======================================
是否有HiveQL查询执行此操作(尽可能高效)? Hive版本:1.2
提前多多感谢!
答案 0 :(得分:0)
select min(time) as time_min
,max(time) as time_max
,value as value
from (select time
,value
,count(is_gap) over
(
partition by value
order by time
) as is_gap_seq
from (select time
,value
,if
(
time - lag(time) over
(partition by value order by time) > 0.001
,1
,null
) as is_gap
from t
) t
) t
group by value
,is_gap_seq
;
P.S。
我正在使用IF
而不是CASE
因为某些原因CASE
会产生以下错误:
失败:IndexOutOfBoundsException索引:2,大小:2
为此目的使用FLOAT
是一个坏主意
它不会给你你期望的结果。