1

テーブル内のすべての行とその前の行の違いを見つけようとしています。

違いとは、2 つの値が同じかどうかを意味します。

for ループが必要かどうかわかりません。また、テーブルに 30 から 40 の列がある場合、30 から 40 の各列のチェックを作成する必要があるということですか?

  • 行 1 - ID1 - データ 1 - データ 2 - データ 3..
  • 行 2 - ID1 - データ 1 - データ 2 - データ 3..
  • 行 3 - ID2 - データ 1 - データ 2 - データ 3..
  • 行 4 - ID1 - データ 1 - データ 2 - データ 3..

    for i = 2 .. 3
    is Row[i][data1] != Row[i-1][data1], Row[i][data2] != Row[i-1][data2]....
    

このチェックは、同じ非一意 ID を持つすべてのレコードに対して実行する必要があります。すなわち。ID1 は、複数のレコードに存在できます。ID1 の行は、ID1 の他の行と比較する必要があります。

4

2 に答える 2

3

Oraclelagの分析関数を使用できます。あなたのテーブルがこれであると仮定しましょう:

CREATE TABLE tbl (no int, id int, val1 int, val2 int)

ここnoで、 はデータが並べられるフィールド、idは一意でない識別子 (グループ識別子)、val1val2値です。このクエリを使用して、各行がそのグループ内の前の行と重複しているかどうかを確認できます。

select no, id, val1, val2,
 case when
  lag(val1,1) over (partition by id order by no) = val1 and
  lag(val2,1) over (partition by id order by no) = val2
 then 1 else 0 end duplicate
from tbl
order by no

これがSQLfiddleにあります

于 2013-10-28T06:19:26.947 に答える
0

これを試して !!

テーブルをそれ自身の PK と比較する

 select t1.value - t2.value from table t1, table t2 
    where t1.primaryKey = t2.primaryKey - 1
于 2013-10-28T06:04:21.687 に答える