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

PostgreSQL पिछले रिकॉर्ड के तत्व की जाँच कर रहा है


आपके पास मौजूद तरीके से काम नहीं करता है। एक विंडो फ़ंक्शन ऐसा नहीं कहा जा सकता। आपका रिकॉर्ड वैरिएबल r के लिए . में एक अंतर्निर्मित कर्सर की तरह है फंदा। लूप के अंदर परिणाम की केवल वर्तमान पंक्ति दिखाई देती है। आपको विंडो फ़ंक्शन <को एकीकृत करना होगा। कोड> अंतराल () इसे आरंभिक चुनें . में ।

लेकिन चूंकि आप वैसे भी पंक्तियों को एक मिलान क्रम में लूप कर रहे हैं, आप इसे दूसरे तरीके से भी कर सकते हैं।

इस बड़े पैमाने पर फिर से लिखे गए उदाहरण पर विचार करें। उल्लंघन करने वाली पहली पंक्ति में वापसी:

CREATE OR REPLACE FUNCTION q8(_day date)
  RETURNS text AS
$BODY$
DECLARE
    r            record;
    last_enddate date;

BEGIN
FOR r IN
    SELECT *
       -- ,lag(r.endDate) OVER (ORDER BY startDate) AS last_enddate
       -- commented, because I supply an alternative solution
    FROM   periods
    ORDER  BY startDate
LOOP
    IF _day BETWEEN r.startDate AND r.endDate THEN
        RETURN 'Violates condition 1';  -- I return differing results
    ELSIF _day BETWEEN (r.startDate - 7) AND r.startDate THEN
        RETURN 'Violates condition 2';
    ELSIF _day BETWEEN last_enddate AND (r.startDate) THEN 
                                      -- removed "- 7 ", that is covered above
        RETURN 'Violates condition 3';
    END IF;

    last_enddate := r.enddate; -- remember for next iteration
END LOOP;

RETURN NULL;

END;
$BODY$ LANGUAGE plpgsql;

और संकेत

  • $1 के लिए उपनाम क्यों ? आपने इसे _day . नाम दिया है पहले से ही घोषणा में। उससे चिपके रहें।
  • यह जानना सुनिश्चित करें कि 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. PostgreSQL डीबी में कनेक्शन की वर्तमान संख्या प्राप्त करने के लिए सही क्वेरी

  2. HikariCP Postgresql ड्राइवर JDBC URL को स्वीकार नहीं करने का दावा करता है

  3. SQL कमांड में C वैरिएबल पास करना

  4. पोस्टग्रेज़ ऑटोकॉमिट को विश्व स्तर पर बंद करना

  5. हाइबरनेट + पोस्टग्रेएसक्यूएल + नेटवर्क एड्रेस टाइप (इनेट, सीडीआईआर)