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

SQL फ़ंक्शन के साथ PostgreSQL generate_series() तर्क के रूप में

आप जो करने की कोशिश कर रहे हैं वह इस तरह काम कर सकता है:

अतिरिक्त जानकारी के साथ संपादित करें

CREATE OR REPLACE FUNCTION f_products_per_month()
  RETURNS SETOF fcholder AS
$BODY$
DECLARE
    r fcholder;
BEGIN

FOR r.y, r.m IN
    SELECT to_char(x, 'YYYY')::int4  -- AS y
          ,to_char(x, 'MM')::int4    -- AS m
    FROM  (SELECT '2008-01-01 0:0'::timestamp
        + (interval '1 month' * generate_series(0,57)) AS x) x
LOOP
    RETURN QUERY
    SELECT *    -- use '*' in this case to stay in sync
    FROM   get_forecast_history(r.m, r.y);

    IF NOT FOUND THEN
       RETURN NEXT r;
    END IF;
END LOOP;

END;
$BODY$
  LANGUAGE plpgsql;

कॉल करें:

SELECT * FROM f_products_per_month();

प्रमुख बिंदु:

  • उत्पादों के बिना महीनों के लिए एक अन्यथा खाली पंक्ति को शामिल करने के लिए अंतिम संपादन।
  • आपने "LEFT JOIN" लिखा था, लेकिन ऐसा नहीं है कि यह कैसे काम कर सकता है।
  • ऐसा करने के कई तरीके हैं, लेकिन RETURN QUERY सबसे सुंदर है।
  • आपके फ़ंक्शन get_forecast_history() द्वारा उपयोग किए जाने वाले रिटर्न प्रकार का उपयोग करें।
  • कॉलम नामों की तालिका-योग्यता (अंतिम संस्करण में अब लागू नहीं) द्वारा OUT पैरामीटर के साथ नामकरण के विरोध से बचें।
  • DATE '2008-01-01' का उपयोग न करें , टाइमस्टैम्प का उपयोग करें जैसे मैंने किया था, इसे वैसे भी to_char() के लिए परिवर्तित किया जाना है। कम कास्टिंग, बेहतर प्रदर्शन करता है (ऐसा नहीं है कि यह इस मामले में ज्यादा मायने रखता है)।
  • '2008-01-01 0:0'::timestamp और timestamp '2008-01-01 0:0' केवल दो सिंटैक्स वेरिएंट ऐसा ही कर रहे हैं।
  • पोस्टग्रेएसक्यूएल के पुराने संस्करणों के लिए भाषा plpgsql डिफॉल्ट द्वारा स्थापित नहीं है। आपको CREATE LANGUAGE plpgsql; . जारी करना पड़ सकता है एक बार आपके डेटाबेस में। मैन्युअल यहां देखें ।

यदि आप चाहें तो शायद आप अपने दो कार्यों को एक क्वेरी या फ़ंक्शन में सरल बना सकते हैं।




  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 8.3 के बाद से TPC-H का प्रदर्शन

  2. पोस्टग्रेज में केवल दृश्य निर्यात करें

  3. डेटाबेस प्रतिकृति समर्थन के लिए डेटा संरचना डिजाइन

  4. ClassCastException:इकाई आईडी पर पुनरावृति करने का प्रयास करते समय पूर्णांक को लंबे समय तक नहीं डाला जा सकता है

  5. डेल्टा ई (सीआईई लैब) का प्रदर्शन एसक्यूएल में गणना और छँटाई