Има сравнително ефективен начин да се определи дали данните са верни - почти. Той ще определи дали има липсващи "1" или "2" в данните. Тази версия не определя дали първият id е "1", защото въпросът ви не споменава това.
Най-доброто решение е да използвате lag()
и lead()
. SQL Server 2008 обаче не поддържа тези функции. Така че, нека подходим към това като празнина и острови. Има ли ситуации с повече от 1 „1“ или „2“ подред за даден id
? Следният код трябва да открие тези аномалии:
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