Det finns ett relativt effektivt sätt att avgöra om uppgifterna är korrekta - ja nästan. Det kommer att avgöra om det saknas "1" eller "2" i datan. Denna version avgör inte om det första ID:t är "1", eftersom din fråga inte nämner det.
Den bästa lösningen är att använda lag()
och lead()
. SQL Server 2008 stöder dock inte dessa funktioner. Så låt oss närma oss detta som ett gap-och-öar. Finns det några situationer med mer än 1 "1" eller "2" i rad för ett givet id
? Följande kod bör hitta dessa anomalier:
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