2017-08-07 58 views
2

我有一个这样的示例数据。我需要的是,对于其中< = A值差< = 1(例如0 <= row1.A - row1.B <=1)中的每两行减去BC的重复值,保持较小的A行。这可以在不使用用户defiend函数的情况下在Hql中完成吗?按值的范围进行分组并删除Hql/Sql中的重复行

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 
+0

这是什么应该是指:'0 <= A值差<= 1' ?行是否按顺序排列?如果是这样,那么订单如何指定? –

+0

@GordonLinoff这意味着两行row1和row2满足0 <= row1.A - row2.A <= 1 – dofine

回答

1

如果我理解正确的话,你要行,其中在B/C行的值由至少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

Works。可惜我没有拿出这个。 – dofine