Ada cara yang relatif efisien untuk menentukan apakah datanya benar -- hampir saja. Ini akan menentukan apakah ada "1" atau "2" yang hilang dalam data. Versi ini tidak menentukan apakah id pertama adalah "1", karena pertanyaan Anda tidak menyebutkannya.
Solusi terbaik adalah menggunakan lag()
dan lead()
. Namun, SQL Server 2008 tidak mendukung fungsi ini. Jadi, mari kita mendekati ini sebagai celah-dan-pulau. Apakah ada situasi dengan lebih dari 1 "1" atau "2" berturut-turut untuk id
tertentu ? Kode berikut akan menemukan anomali ini:
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