Hive QL列

时间:2016-06-20 22:55:27

标签: sql hiveql

我们说我有一个非常简单的表:

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

我想分组(ID)。什么是适当的查询告诉我最小的差异 - 像这样

ID: MIN_DIF:
A    2
B    1

现在查询的简单性比效率更重要,但是最基本和最有效的查询都将受到赞赏。

旁注:找到平均距离将是一个奖励,但我需要先得分

1 个答案:

答案 0 :(得分: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;