1

我试图找出表格中每一行与其前一行之间的区别。

当我说差异时,我的意思是两个值是否相同。

我不确定我是否需要一个 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 的所有记录进行此检查。IE。ID1 可以存在多个记录。ID1 的行需要与 ID1 的其他行进行比较。

4

2 回答 2

3

您可以使用 Oraclelag分析功能。让我们假设您的表是这样的:

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

whereno是排序数据的字段,id是您的非唯一标识符(组标识符),val1并且val2是值。您可以使用此查询来查找每一行是否与其组中的前一行重复:

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 回答