To jest skomplikowane. Najpierw musisz znaleźć kolejne rekordy dat, więc z
thedate theid thetype 2014-07-12 5001 59 2014-07-12 5002 101 2014-07-12 5003 88 2014-07-13 5004 10 2014-07-12 5005 60
zidentyfikowałbyś 2014-07-12 jako jedno wystąpienie dla pierwszych trzech rekordów, a drugie dla ostatniego rekordu. Drugi rekord musiałby zająć pozycję #3 w Twoich wynikach, a nie #5.
Osiągasz to, nadając kolejnym rekordom klucz grupy za pomocą pierwszego LAG
aby zajrzeć do poprzedniego rekordu, tworząc w ten sposób flagę przy zmianie grupy, a następnie kumulując te flagi.
select thedate, theid, thetype
from
(
select
thedate, theid, thetype,
sum(new_group) over (order by theid) as group_key
from
(
select
thedate, theid, thetype,
case when lag(thedate) over (order by theid) = thedate then 0 else 1 as new_group
from mytable
) marked
) grouped
order by
group_key,
case when thetype = 101 then 1 else 0 end,
theid;