按值范围分组并删除 Hql/Sql 中的重复行

Group by value range and drop duplicates rows in Hql/Sql

我有这样的示例数据。我需要的是,对于 0 <= A 值差 <= 1 的每两行(例如 0 <= row1.A - row1.B <=1 )将重复值删除 BC,保留较小的 A 行。这可以在不使用用户自定义函数的情况下在 Hql 中完成吗?

A B C
1 2 3
4 2 3
2 1 1
3 1 1
2 2 3
3 0 2

结果:

A B C
1 2 3
2 1 1
3 0 2
4 2 3

如果我没理解错的话,您希望行中 B/C 行的 A 值与前一个 A 值至少相差 2。

您可以使用 lag() 然后一些逻辑来做到这一点:

select t.*
from (select t.*, lag(A) over (partition by B, C order by A) as prev_a
      from t
     ) t
where prev_a is null or A > prev_a + 1;