データが正しいかどうかを判断する比較的効率的な方法があります。データに欠落している「1」または「2」があるかどうかを判断します。このバージョンでは、最初の ID が「1」であるかどうかを判断しません。これは、質問で言及されていないためです。
最善の解決策は lag()
を使用することです および lead()
.ただし、SQL Server 2008 はこれらの関数をサポートしていません。では、これをギャップと島として考えてみましょう。特定の id
に対して連続して複数の「1」または「2」がある状況はありますか? ?次のコードは、これらの異常を検出する必要があります:
select id, inoutid, count(*) as num_in_row,
from (select t.*,
row_umber() over (partition by id, inoutid order by date, hours, minute) as seqnum_ii,
row_umber() over (partition by id order by date, hours, minute) as seqnum_i
from t
) t
group by id, inoutid, (seqnum_i - seqnum_ii)
having count(*) > 1