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

PostgreSQL में अगली और पिछली पंक्ति के साथ वर्तमान पंक्ति की तुलना कैसे करें?

WINDOW functions . का उपयोग करके यह मेरा समाधान है . मैंने lag . का इस्तेमाल किया और lead कार्य। दोनों वर्तमान पंक्ति से ऑफ़सेट में एक पंक्ति से एक कॉलम से एक मान लौटाते हैं। lag वापस जाता है और lead ऑफ़सेट में अगला जाता है।

SELECT tokcat.text
FROM (
    SELECT text, category, chartype, lag(category,1) OVER w as previousCategory, lead(category,1) OVER w as nextCategory
    FROM token t, textBlockHasToken tb
    WHERE tb.tokenId = t.id
    WINDOW w AS (
        PARTITION BY textBlockId, sentence
        ORDER BY textBlockId, sentence, position
    )
) tokcat
WHERE 'NAME' = ANY(previousCategory)
AND 'NAME' = ANY(nextCategory)
AND 'NAME' <> ANY(category)

सरलीकृत संस्करण:

SELECT text
FROM (
    SELECT text
          ,category 
          ,lag(category) OVER w as previous_cat
          ,lead(category) OVER w as next_cat
    FROM   token t
    JOIN   textblockhastoken tb ON tb.tokenid = t.id
    WINDOW w AS (PARTITION BY textblockid, sentence ORDER BY position)
    ) tokcat
WHERE  category <> 'NAME'
AND    previous_cat = 'NAME'
AND    next_cat = 'NAME';

प्रमुख बिंदु

  • = ANY() आवश्यकता नहीं है, विंडो फ़ंक्शन एकल मान देता है
  • सबक्वायरी में कुछ अनावश्यक फ़ील्ड
  • स्तंभों के आधार पर आदेश देने की कोई आवश्यकता नहीं है, कि आप PARTITION BY - ORDER BY अंदर . पर लागू होता है विभाजन
  • उद्धरण के बिना मिश्रित केस पहचानकर्ताओं का उपयोग न करें, यह केवल भ्रम पैदा करता है। (बेहतर अभी तक:PostgreSQL में मिश्रित केस आइडेंटिफ़ायर का उपयोग न करें कभी भी )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विदेशी कुंजी और प्राथमिक कुंजी पर पोस्टग्रेज और इंडेक्स

  2. jdbc:postgresql://192.168.1.8:5432/NexentaSearch के लिए कोई उपयुक्त ड्राइवर नहीं मिला

  3. मैं postgresql के लिए HikariCP को कैसे कॉन्फ़िगर करूं?

  4. PostgreSQL बल्क डेटा लोड करने के लिए 7 सर्वोत्तम अभ्यास युक्तियाँ

  5. postgresql वापसी 0 यदि लौटाया गया मान शून्य है