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

PostgreSQL last_value bỏ qua nulls

Những gì bạn muốn là lag(ignore nulls) . Đây là một cách để làm những gì bạn muốn, sử dụng hai chức năng cửa sổ. Đầu tiên xác định nhóm cho NULL giá trị và giá trị thứ hai chỉ định giá trị:

select idx, value, coalesce(value, max(value) over (partition by grp))
from (select b.*, count(value) over (order by idx) as grp
      from base b
     ) b
order by idx;

Bạn cũng có thể làm điều này mà không cần truy vấn con bằng cách sử dụng mảng. Về cơ bản, lấy phần tử cuối cùng không tính NULL s:

select idx, value, 
       (array_remove(array_agg(value) over (order by idx), null))[count(value) over (order by idx)]
from base b
order by idx;

Tại đây là một 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. Cách tổng hợp các cặp phù hợp thành các thành phần được kết nối trong Python

  2. Cách ngăn chặn thông báo INFO khi chạy tập lệnh psql

  3. dấu thời gian postgresql thành giá trị std ::chrono

  4. thay thế cho chỉ mục bitmap trong postgresql

  5. Làm thế nào để chuyển đổi chuỗi thành dấu thời gian mà không có múi giờ