Existe uma maneira relativamente eficiente de determinar se os dados estão corretos - bem, quase. Ele determinará se estão faltando "1"s ou "2"s nos dados. Esta versão não determina se o primeiro id é "1", porque sua pergunta não menciona isso.
A melhor solução é usar
lag()
e lead()
. No entanto, o SQL Server 2008 não oferece suporte a essas funções. Então, vamos abordar isso como uma lacuna e ilhas. Existem situações com mais de 1 "1" ou "2" em uma linha para um determinado id
? O código a seguir deve encontrar essas anomalias: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