2017-08-07 7 views
2

私はこのようなサンプルデータを持っています。私が必要とするのは、0 < = Aの値の差< = 1(例えば、0 <= row1.A - row1.B <=1)の値がBCになるような2行ごとに、小さい方の値を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 <<= 1 'の値の差を= ?行は順番に並んでいますか?もしそうなら、注文はどのように指定されていますか? –

+0

@ GordonLinoffこれは、row1とrow2の2つの行が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

関連する問題