Това е сложно. Първо трябва да намерите последователни записи на дати, така че с
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
бихте идентифицирали 2014-07-12 като едно събитие за първите три записа и друго за последния запис. Вторият запис трябва да получи позиция №3 във вашите резултати, а не №5.
Постигате това, като давате на последователни записи групов ключ, като използвате първия LAG
за да разгледате предишния запис, като по този начин създадете флаг при промяна на групата и след това кумулирате тези флагове.
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;