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

पंक्ति के प्रत्येक स्तंभ के लिए अंतिम ज्ञात मान प्राप्त करें

यहां मैं एक एकत्रीकरण फ़ंक्शन बनाता हूं जो कॉलम को सरणी में एकत्र करता है। फिर यह केवल NULLs को हटाने और प्रत्येक सरणी से अंतिम तत्व का चयन करने की बात है।

नमूना डेटा

CREATE TABLE T (
    date_time timestamp,
    a text,
    b text,
    c text
);

INSERT INTO T VALUES ('2013-10-15 11:45:00', NULL, 'timtim', 'fred'),
('2013-10-15 13:00:00', 'tune', 'reco', NULL  ),
('2013-10-16 12:00:00', 'abc', NULL, NULL     ),
('2013-10-16 13:00:00', NULL, 'died', NULL    );

समाधान

CREATE AGGREGATE array_accum (anyelement)
(
    sfunc = array_append,
    stype = anyarray,
    initcond = '{}'
);

WITH latest_nonull AS (
    SELECT MAX(date_time) As MaxDateTime, 
           array_remove(array_accum(a), NULL) AS A, 
           array_remove(array_accum(b), NULL) AS B, 
           array_remove(array_accum(c), NULL) AS C
    FROM T
    ORDER BY date_time
)
SELECT MaxDateTime, A[array_upper(A, 1)], B[array_upper(B,1)], C[array_upper(C,1)]
FROM latest_nonull;

परिणाम

     maxdatetime     |  a  |  b   |  c
---------------------+-----+------+------
 2013-10-16 13:00:00 | abc | died | fred
(1 row)


  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. postgresql वापसी 0 यदि लौटाया गया मान शून्य है

  3. पोस्टग्रेज - FATAL:डेटाबेस फ़ाइलें सर्वर के साथ असंगत हैं

  4. PostgreSQL डेटाबेस का बैकअप और पुनर्स्थापना कैसे करें

  5. PostgreSQL:डेटाटाइम के बीच