按值范围分组并删除 Hql/Sql 中的重复行
Group by value range and drop duplicates rows in Hql/Sql
我有这样的示例数据。我需要的是,对于 0 <= A
值差 <= 1 的每两行(例如 0 <= row1.A - row1.B <=1
)将重复值删除 B
和 C
,保留较小的 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;
我有这样的示例数据。我需要的是,对于 0 <= A
值差 <= 1 的每两行(例如 0 <= row1.A - row1.B <=1
)将重复值删除 B
和 C
,保留较小的 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;