Questo è complicato. Per prima cosa devi trovare record di date consecutive, quindi con
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
identificheresti 2014-07-12 come un'occorrenza per i primi tre record e un'altra per l'ultimo record. Il secondo record dovrebbe ottenere la posizione n. 3 nei risultati, non n. 5.
Puoi ottenere ciò assegnando ai record consecutivi una chiave di gruppo utilizzando il primo LAG
per esaminare il record precedente, creando così un flag al cambio di gruppo e quindi cumulando questi flag.
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;