2017-10-08 72 views
0

我在MSSQL數據庫中的表中比較值時遇到了一個問題。如果條件滿足,比較表中的兩個連續行並忽略結果

一列(假設它被稱爲ID)包含整數值 - 這些值應該是連續的。另一列包含位置ID信息。現在還有一列包含產品質量檢查是否失敗的信息(二進制值 - 0或1)。

現在我想要做的是比較兩個連續的行,找出ID列中的值是否也是連續的,並選擇ID列中沒有獲得連續值的位置ID IF質量檢查列有值0.如果它是1,我希望我的查詢排序跳到下一行,並將下一行與前一行進行比較。

所以總結起來我想,只選擇那些沒有質量檢查組連續的ID值在0(如果它的1,而不是連續的 - 忽略結果)表的locationIDs

我考慮使用光標這一點,但我不太清楚,我將非常感謝,如果有人能指出我在正確的方向(最好有一些例子)。謝謝!

+3

編輯您的問題,並提供樣本數據和期望的結果。 'locationId'與'id'有什麼關係? –

+0

使用相應的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。語法和特徵的差異常常影響答案,例如'Lead' /'Lag'。請注意,'tsql'縮小了選擇範圍,但不指定數據庫。 – HABO

回答

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; 

這將返回間隙後面的行。

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 
相關問題