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

क्या विंडो फ़ंक्शन LAG उस कॉलम को संदर्भित कर सकता है जिसके मूल्य की गणना की जा रही है?

नाइव रिकर्सिव चेन नाइटर:

        -- temp view to avoid nested CTE
CREATE TEMP VIEW drag AS
        SELECT e.type,e.time_stamp
        , ROW_NUMBER() OVER www as rn                   -- number the records
        , FIRST_VALUE(e.time_stamp) OVER www as fst     -- the "group leader"
        , EXISTS (SELECT * FROM event x
                WHERE x.type = e.type
                AND x.time_stamp < e.time_stamp) AS is_dup
        FROM event e
        WINDOW www AS (PARTITION BY type ORDER BY time_stamp)
        ;

WITH RECURSIVE ttt AS (
        SELECT d0.*
        FROM drag d0 WHERE d0.is_dup = False -- only the "group leaders"
    UNION ALL
        SELECT d1.type, d1.time_stamp, d1.rn
          , CASE WHEN d1.time_stamp - ttt.fst > 20 THEN d1.time_stamp
                 ELSE ttt.fst END AS fst   -- new "group leader"
          , CASE WHEN d1.time_stamp - ttt.fst > 20 THEN False
                 ELSE True END AS is_dup
        FROM drag d1
        JOIN ttt ON d1.type = ttt.type AND d1.rn = ttt.rn+1
        )
SELECT * FROM ttt
ORDER BY type, time_stamp
        ;

परिणाम:

CREATE TABLE
INSERT 0 10
CREATE VIEW
 type | time_stamp | rn | fst | is_dup 
------+------------+----+-----+--------
    1 |          1 |  1 |   1 | f
    1 |          2 |  2 |   1 | t
    1 |          3 |  3 |   1 | t
    1 |         10 |  4 |   1 | t
    1 |         15 |  5 |   1 | t
    1 |         21 |  6 |   1 | t
    1 |         40 |  7 |  40 | f
    2 |          2 |  1 |   2 | f
    2 |         10 |  2 |   2 | t
    2 |         13 |  3 |   2 | t
(10 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रत्येक स्कीमा django के साथ सुपरयुसर को स्वत:बनाएँ

  2. PostgreSQL 9.1 . में स्वायत्त लेनदेन

  3. प्रोएक्टिव पोस्टग्रेएसक्यूएल मॉनिटरिंग (डेवलपर स्टूडियो/सलाहकार कोण)

  4. क्लाउड एसक्यूएल (पोस्टग्रेज) विदेशी डेटा रैपर कनेक्शन समय प्रतिकृति उदाहरण के लिए समाप्त हो गया

  5. PostgreSQL में डेटाबेस और टेबल कैसे बनाएं और डिलीट करें