2016-06-20 43 views
0

比方說,我有一個非常簡單的表是這樣的:蜂巢QL差異

ID: Integer 
A 4 
A 9 
A 2 
B 4 
B 7 
B 3 

我想GROUPBY(ID)。什麼會,告訴我的最小差異適當的查詢 - 這樣

ID: MIN_DIF: 
A 2 
B 1 

查詢的簡單,現在比效率更重要,但無論是最基本和最有效的查詢,將不勝感激。

旁註:查找的平均距離將是一個獎金,但我需要分鐘首次

回答

0

您可以使用lag()lead()

select id, min(int - prev_int) 
from (select t.*, lag(int) over (partition by id order by int) as prev_int 
     from t 
    ) t 
group by id 
where prev_int is not null; 

的另一種方法避免了窗口的功能,但或許會更糟糕性能爲:

select t.id, min(t2.integer - t.integer) 
from t join 
    t t2 
    on t.id = t2.id 
where t2.integer > t.integer 
group by t.id; 
+0

[apache語言手冊](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF)不包含inc魯德滯後還是領先? – knowads

+0

@knowads。 。 。在這裏檢查:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics。 –