PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Truy xuất giá trị đã biết cuối cùng cho mỗi cột của hàng

Ở đây tôi tạo một hàm tổng hợp để gom các cột thành mảng. Sau đó, nó chỉ là vấn đề loại bỏ các NULL và chọn phần tử cuối cùng từ mỗi mảng.

Dữ liệu mẫu

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

Giải pháp

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;

Kết quả

     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. Làm thế nào để bạn viết một truy vấn không phân biệt chữ hoa chữ thường cho cả MySQL và Postgres?

  2. PostgreSQL 12:Triển khai K-Nearest Neighbor Space Partitioned Generated Tree Indexes

  3. Quản lý một Bản cam kết PostgreSQL

  4. Postgresql enum những ưu điểm và nhược điểm là gì?

  5. PostgreSQL LIKE các biến thể hiệu suất truy vấn