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

Làm cách nào để chọn giá trị trước đó một cách hiệu quả?

Tôi đã tìm thấy câu trả lời này cho SQL Server cũng hoạt động trong Postgres. Chưa bao giờ làm điều đó trước đây, tôi nghĩ rằng kỹ thuật này khá thông minh. Về cơ bản, anh ta tạo một phân vùng tùy chỉnh cho hàm cửa sổ bằng cách sử dụng một câu lệnh trường hợp bên trong một truy vấn lồng nhau để tăng tổng khi giá trị không phải là null và để nguyên nó. Điều này cho phép người ta phân định mọi phần rỗng với cùng một số với giá trị không rỗng trước đó. Đây là truy vấn:

SELECT
  id, value, value_partition, first_value(value) over (partition by value_partition order by id)
FROM (
  SELECT
    id,
    value,
    sum(case when value is null then 0 else 1 end) over (order by id) as value_partition

  FROM p
  ORDER BY id ASC
) as q

Và kết quả:

 id | value | value_partition | first_value
----+-------+-----------------+-------------
  1 |   100 |               1 |         100
  2 |       |               1 |         100
  3 |       |               1 |         100
  4 |       |               1 |         100
  5 |       |               1 |         100
  6 |       |               1 |         100
  7 |       |               1 |         100
  8 |   200 |               2 |         200
  9 |       |               2 |         200
(9 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. Để bỏ qua các khóa trùng lặp trong quá trình 'sao chép từ' trong postgresql

  2. Tạo người dùng PostgreSQL và thêm họ vào cơ sở dữ liệu

  3. Quản lý tính khả dụng cao trong PostgreSQL - Phần III:Patroni

  4. Sử dụng JSONB trong PostgreSQL:Cách lưu trữ &lập chỉ mục hiệu quả dữ liệu JSON trong PostgreSQL

  5. Kết nối với cơ sở dữ liệu heroku với pgadmin