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

एक सहसंबद्ध उपश्रेणी के साथ कुशल जुड़ाव

इसे आजमाएं:

SELECT  rt.rangeId, aDate, CASE WHEN doUse = 1 THEN qty ELSE 0 END AS qty
FROM    (
    SELECT  *
    FROM    (
        SELECT  r.*, t.*, SUM(doUse) OVER (PARTITION BY rangeId ORDER BY aDate) AS span
        FROM    (
            SELECT  r.rangeId, startDate, MAX(day) AS dm
            FROM    Range r, Days d
            WHERE   d.rangeid = r.rangeid
            GROUP BY
                r.rangeId, startDate
            ) r, Dates t
        WHERE   t.adate >= startDate
        ORDER BY
            rangeId, t.adate
        )
    WHERE
        span <= dm
    ) rt, Days d
WHERE   d.rangeId = rt.rangeID
    AND d.day = GREATEST(rt.span, 1)

पी. एस. मुझे ऐसा लगता है कि इन सभी Dates को रखने का एकमात्र बिंदु डेटाबेस में चिह्नित छुट्टियों के साथ एक सतत कैलेंडर प्राप्त करना है।

आप निम्नलिखित निर्माण का उपयोग करके Oracle में मनमानी लंबाई का कैलेंडर उत्पन्न कर सकते हैं:

SELECT :startDate + ROWNUM
FROM   dual
CONNECT BY
       1 = 1
WHERE  rownum < :length

और केवल छुट्टियों को Dates . में रखें . एक साधारण जुड़ाव आपको दिखाएगा कि कौन सी Dates छुट्टियां हैं और कौन सी नहीं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oracle में डिफ़ॉल्ट दिनांक स्वरूप बदलने के लिए Pl/Sql ट्रिगर

  2. Oracle SQL WHERE क्लॉज में (+) चिन्ह का क्या अर्थ है?

  3. Oracle SQL - यदि क्वेरी परिणाम नहीं लौटाती है तो कुछ डिफ़ॉल्ट मान लौटाएं

  4. के बीच क्या अंतर है || Oracle में ऑपरेटर और कॉनकैट फ़ंक्शन?

  5. Oracle - वैकल्पिक मापदंडों के साथ सूचकांक का उपयोग