ठीक है, आप इतने करीब नहीं हैं क्योंकि row_number()
एक ही समय में दो समूहों द्वारा अनुक्रमों को ट्रैक नहीं कर सकता। PARTITION BY tm_nl_fixedid ORDER BY date RESTART ON GAP
मौजूद नहीं है, ऐसी कोई बात नहीं है।
इट्ज़िक बेन-गण के पास उन द्वीपों और अंतरालों की समस्या का समाधान है जिनका आप सामना कर रहे हैं (वास्तव में कई समाधान)। विचार मुख्य मानदंड (तारीख) द्वारा पंक्तियों को क्रमबद्ध करना है और फिर मानदंड + मुख्य मानदंड को विभाजित करना है। अध्यादेशों के बीच अंतर वही रहेगा क्योंकि वे समान विभाजन मानदंड और दिनांक श्रृंखला से संबंधित हैं।
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
यहां उदाहरण के साथ Sql Fiddle है ।