Nun, Sie sind nicht so nah dran, weil row_number()
kann keine Sequenzen von zwei Gruppen gleichzeitig verfolgen. PARTITION BY tm_nl_fixedid ORDER BY date RESTART ON GAP
existiert nicht, so etwas gibt es nicht.
Itzik Ben-Gan hat eine Lösung für das Problem der Inseln und Lücken, mit dem Sie konfrontiert sind (eigentlich mehrere Lösungen). Die Idee ist, Zeilen nach den Hauptkriterien (Datum) und dann nach Partitionierungskriterien + Hauptkriterien zu ordnen. Der Unterschied zwischen Ordnungszahlen bleibt gleich, da sie zu denselben Partitionierungskriterien und Datumsreihen gehören.
with cte as
(
select *,
-- While order by date and order by something-else, date
-- run along, they belong to the same sequence
row_number() over (order by tm_date)
- row_number() over (order by tm_nl_fixedid, tm_date) grp
from trackingMessages
)
select *,
-- Now we can get ordinal number grouped by each sequence
row_number() over (partition by tm_nl_fixedid, grp
order by tm_date) rn
from cte
order by tm_date
Hier ist Sql Fiddle mit Beispiel .