2016-09-26 146 views
0

时间戳的平均差异我有这个表包含两列如何获得在蜂巢

hive> select * from hivetable; 

a 2016-09-16T03:01:12.367782Z 
b 2016-09-16T03:01:12.300514Z 
c 2016-09-16T03:01:12.241532Z 
a 2016-09-16T03:01:12.138016Z 
c 2016-09-16T03:01:12.136986Z 
b 2016-09-16T03:01:10.512201Z 
c 2016-09-16T03:01:12.235671Z 

Time taken: 0.457 seconds, Fetched: 7 row(s) 

低于现在我想找到从第一列中的独特价值和时间戳差或者我应该说平均时间戳如果存在超过2条记录的情况下的差异,如c。所以在我的情况下,输出应该像

a 1 day 5 hr 30 min 20 sec 
b 5 sec 
c 30 minutes 

注:这只是一个样本输出,而不是实际输出

是否有可能得到这个输出或任何类似一个蜂巢中?

+0

删除与您的查询无关的标签。 – scaisEdge

+0

我已经做出了更改。 – user3847894

+0

参见https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics中的lag()或lead()函数 –

回答

1

您只需要使用窗口函数来选择分组中的上一行。我不相信它可以被压缩成只有一个查询。

select 
id, 
avg(DATEDIFF(time, prev_time)) as avg_time_diff_days 
from (
    select id, 
    time, 
    LAG(time, 1, 0) OVER (PARTITION BY id, time ORDER BY time ASC)) as prev_time 
    from table 
) intervals 
group by id;