Der er en relativt effektiv måde at afgøre, om dataene er korrekte - ja næsten. Det vil afgøre, om der mangler "1" eller "2" i dataene. Denne version afgør ikke, om det første id er "1", fordi dit spørgsmål ikke nævner det.
Den bedste løsning er at bruge lag()
og lead()
. SQL Server 2008 understøtter dog ikke disse funktioner. Så lad os se på dette som et hul-og-øer. Er der nogen situationer med mere end 1 "1" eller "2" i træk for et givet id
? Følgende kode bør finde disse uregelmæssigheder:
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