比较表中连续的两行,如果满足条件则忽略结果



我在比较MSSQL数据库中的表中的值时遇到一个问题。

一列(假设它被称为ID)包含整数值——这些值应该是连续的。另一列包含位置ID信息。现在还有一列包含产品是否未通过质量检查的信息(二进制值-0或1)。

现在我要做的是比较两个连续的行,找出ID列中的值是否也是连续的,并选择那些在ID列中没有连续值的位置ID——只有if质量检查列的值为0。如果是1,我希望我的查询跳转到下一行,并将下一行与上一行进行比较。

因此,总的来说,我只想从表中选择那些没有连续ID值的位置ID进行质量检查,并将其设置为0(如果其为1且不连续-忽略结果)

我正在考虑使用光标进行这一次,但我不太确定,如果有人能给我指正确的方向(最好是举一些例子),我将不胜感激。谢谢

您可以使用lag()执行此操作。我认为它是这样的:

select t.*
from (select t.*,
lag(id) over (order by id) as prev_id,
lag(info) over (order by id) as prev_info
from t
) t
where id <> prev_id + 1 and prev_info = 0 and info = 0;

这将返回间隙后面的行。

select t.*
from (select t.*,
lag(id) over (order by id) as prev_id
from t
where info = 0
) t
where id > prev_id + 1 
order by id 

最新更新