2016-09-26 78 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;