Existuje poměrně účinný způsob, jak určit, zda jsou data správná - tedy téměř. Zjistí, zda v datech chybí „1“ nebo „2“. Tato verze neurčuje, zda je první id „1“, protože to vaše otázka nezmiňuje.
Nejlepším řešením je použít lag()
a lead()
. SQL Server 2008 však tyto funkce nepodporuje. Takže pojďme k tomu přistupovat jako k mezerám a ostrovům. Existují nějaké situace s více než 1 „1“ nebo „2“ v řadě pro dané id
? Následující kód by měl najít tyto anomálie:
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