假设我有一个包含三列的下表:
id | start_block | end_block
-----------------------------
01 | 00000000001 | 00000000005
02 | 00000000006 | 00000000011
03 | 00000000012 | 00000000018
04 | 00000000025 | 00000000031
05 | 00000000032 | 00000000043
每行是一个“开始块”和一个“结束块”。如果数据是完美的,每个起始块都会比它之前的结束块多一个。因此,对于行 id == 02,起始块是 6,而它之前的行的结束块是 5。
我需要查询这些数据(它是数万行)并找到任何丢失的行。根据我的示例数据,在 03 和 04 之间应该有一行,起始块为 19,结束块为 24。
我试图在 JSP 中构建一个报告来协调这些数据并找到丢失的行。这样做的丑陋方法是将整个记录集拉入一个数组并在每一行上执行类似的操作:
if ((arry(i,1) + 1) != (arry(i+1),1)( {
print("Bad Row!\n");
}
但是,我真的希望能够直接查询记录集并返回我需要的内容。那可能吗?如果没有,有人可以指出我创建一个满足我需要的存储过程的正确方向吗?
最佳答案
尝试一下当然不会有什么坏处
CREATE TABLE #t (startz INT, zend INT)
insert into #t (startz, zend) values (1,5)
insert into #t (startz, zend) values (6,11)
insert into #t (startz, zend) values (12,18)
insert into #t (startz, zend) values (25,31)
insert into #t (startz, zend) values (32,43)
select * from #t ta
LEFT OUTER JOIN #t tb ON tb.startz - 1 = ta.zend
WHERE tb.startz IS NULL
最后的结果是假阳性。但容易消除。