PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एक चयन में डुप्लिकेट बाद के रिकॉर्ड को फ़िल्टर करना

ठीक है, आप इतने करीब नहीं हैं क्योंकि 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 है

और यहां Sql सर्वर MVP डीप डाइव्स का अध्याय 5 है जिसमें द्वीपों और अंतराल की समस्या के कई समाधान हैं



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे PostgreSQL से डेटाबेस में डंप मर्ज करने के लिए?

  2. मैं php में sql क्वेरी निष्पादन को कैसे रोक सकता हूं?

  3. Postgres_fdw के साथ लोकलहोस्ट से कैसे जुड़ें?

  4. psycopg2:टुपल्स के टपल के मानों के साथ तालिका में कई पंक्तियों को अपडेट करें

  5. Postgres में निकटतम कार्य दिवस की गणना करें