Er is een relatief efficiënte manier om te bepalen of de gegevens correct zijn - nou ja, bijna. Het zal bepalen of er "1"-en of "2"-en in de gegevens ontbreken. Deze versie bepaalt niet of de eerste id "1" is, omdat uw vraag dat niet vermeldt.
De beste oplossing is om lag()
. te gebruiken en lead()
. SQL Server 2008 ondersteunt deze functies echter niet. Laten we dit dus benaderen als een kloof-en-eilanden. Zijn er situaties met meer dan 1 "1" of "2" op een rij voor een gegeven id
? De volgende code zou deze afwijkingen moeten vinden:
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