PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Ambil nilai terakhir yang diketahui untuk setiap kolom dari satu baris

Di sini saya membuat fungsi agregasi yang mengumpulkan kolom menjadi array. Maka tinggal menghapus NULL dan memilih elemen terakhir dari setiap larik.

Contoh Data

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    );

Solusi

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;

Hasil

     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. Bagaimana saya bisa menggunakan pemicu PostgreSQL untuk menyimpan perubahan (pernyataan SQL dan perubahan baris)

  2. Instal PHP dengan Postgresql di MAC menggunakan homebrew

  3. Cara Mengelola Database PostgreSQL Anda Dari ClusterControl CLI

  4. Simpan output dari fungsi sql ke file csv (COPY) dengan nama file dinamis

  5. Sepuluh Cara untuk Memperluas Fungsi PostgreSQL