Das ist kompliziert. Zuerst müssen Sie aufeinanderfolgende Datumsangaben finden, also mit
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
Sie würden 2014-07-12 als ein Vorkommen für die ersten drei Datensätze und ein weiteres für den letzten Datensatz identifizieren. Der zweite Datensatz müsste Position #3 in Ihren Ergebnissen bekommen, nicht #5.
Dies erreichen Sie, indem Sie aufeinanderfolgenden Datensätzen einen Gruppenschlüssel geben, indem Sie zuerst LAG
verwenden um in den vorherigen Datensatz zu schauen, wodurch ein Flag bei Gruppenwechsel erstellt wird und diese Flags dann kumuliert werden.
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;