No, nejste tak blízko, protože row_number()
nelze sledovat sekvence dvou skupin současně. PARTITION BY tm_nl_fixedid ORDER BY date RESTART ON GAP
neexistuje, nic takového neexistuje.
Itzik Ben-Gan má řešení pro problém ostrovů a mezer, kterým čelíte (ve skutečnosti několik řešení). Cílem je seřadit řádky podle hlavních kritérií (datum) a poté podle kritérií rozdělení + hlavních kritérií. Rozdíl mezi pořadovými číslicemi zůstane stejný, protože patří ke stejným kritériím rozdělení a datové řadě.
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