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

SQL Oracle में रोलिंग 90 दिन की तारीख विंडो

Oracle 12 से, यह एक प्रकार की क्वेरी है जो MATCH_RECOGNIZE . है के लिए अभिप्रेत है:

SELECT tran_dt,
       alert,
       tran_dt
         - LAG(CASE alert WHEN 'Yes' THEN tran_dt END, 1, tran_dt)
             IGNORE NULLS OVER (ORDER BY tran_dt)
         AS days
FROM   table_name
MATCH_RECOGNIZE (
  ORDER BY tran_dt
  MEASURES
    CLASSIFIER() AS alert
  ALL ROWS PER MATCH
  PATTERN ( "Yes" "No"* )
  DEFINE
    "No" AS tran_dt <= "Yes".tran_dt + INTERVAL '90' DAY
)

Oracle 12 से पहले, आप पुनरावर्ती क्वेरी का उपयोग कर सकते हैं:

WITH dates (tran_dt, rn) AS (
  SELECT tran_dt,
         ROW_NUMBER() OVER (ORDER BY tran_dt) AS rn
  FROM   table_name
),
rolling_dates (tran_dt, alert, rn, days, last_alert) AS (
  SELECT tran_dt, 'Yes', rn, 0, tran_dt
  FROM   dates
  WHERE  rn = 1
UNION ALL
  SELECT d.tran_dt,
         CASE
         WHEN d.tran_dt <= r.last_alert + INTERVAL '90' DAY
         THEN 'No'
         ELSE 'Yes'
         END,
         d.rn,
         d.tran_dt - r.last_alert,
         CASE
         WHEN d.tran_dt <= r.last_alert + INTERVAL '90' DAY
         THEN r.last_alert
         ELSE d.tran_dt
         END
  FROM   rolling_dates r
         INNER JOIN dates d
         ON (r.rn + 1 = d.rn)
)
SELECT tran_dt,
       alert,
       days
FROM   rolling_dates;

जो दोनों आउटपुट:

db<>fiddle यहां



  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. Oracle स्वचालित रूप से मल्टीरिकॉर्ड ब्लॉक भाग 2 में रिकॉर्ड सम्मिलित करता है

  3. ओरेकल pl/sql में एक्सएमएल पार्सिंग

  4. ORA-29285 कैसे हल करें:फ़ाइल लिखने में त्रुटि

  5. चरित्र सेट एन्कोडिंग और भंडारण आकार कारक