我们说我有一个非常简单的表:
ID: Integer
A 4
A 9
A 2
B 4
B 7
B 3
我想分组(ID)。什么是适当的查询告诉我最小的差异 - 像这样
ID: MIN_DIF:
A 2
B 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;