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

Chức năng của Window:last_value (ORDER BY ... ASC) giống như last_value (ORDER BY ... DESC)

Sự cố với LAST_VALUE() là các quy tắc mặc định cho các mệnh đề cửa sổ loại bỏ các giá trị mà bạn thực sự muốn. Đây là một vấn đề rất nhỏ và đúng trong tất cả các cơ sở dữ liệu hỗ trợ chức năng này.

Điều này đến từ một blog của Oracle:

Trong khi chúng ta đang nói về các mệnh đề cửa sổ, mệnh đề cửa sổ ngầm định và có thể hoán đổi cho các hàm FIRST và LAST là ROWSBETWEEN UNBOUNDED PRECEDING VÀ UNBOUNDED F SAU, nói cách khác là các hàng trong phân vùng của chúng ta. Đối với FIRST_VALUE và LAST_VALUE, mệnh đề cửa sổ có thể thay đổi nhưng mặc định là ROWS GIỮA ROW PRECEDINGAND HIỆN TẠI KHÔNG ĐƯỢC BẮT ĐẦU, nói cách khác, chúng tôi loại trừ các hàng sau cái hiện tại. Việc loại bỏ các hàng ở cuối danh sách không có gì khác biệt khi chúng tôi đang tìm kiếm hàng đầu tiên trong danh sách ( FIRST_VALUE) nhưng nó thực sự tạo ra sự khác biệt khi chúng tôi đang tìm kiếm hàng cuối cùng trong danh sách (LAST_VALUE) vì vậy, bạn thường sẽ cần chỉ định ROWS GIỮA BAO LÂU TRƯỚC VÀ KHÔNG ĐƯỢC THEO DÕI một cách rõ ràng khi sử dụngLAST_VALUE hoặc chỉ cần sử dụng FIRST_VALUE và đảo ngược thứ tự sắp xếp .

Do đó, chỉ cần sử dụng FIRST_VALUE() . Điều này thực hiện những gì bạn muốn:

with test (id, session_ID, value) as (
      (VALUES (0, 2, 100),
              (1, 2, 120),
              (2, 2, 140),
              (3, 1, 900),
              (4, 1, 800),
              (5, 1, 500)
      )
     )
select id,
       first_value(value) over (partition by session_ID order by id) as first_value_window,
       first_value(value) over (partition by session_ID order by id desc) as first_value_window_desc
from test
order by id


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng hợp kết nối PostgreSQL:Phần 1 - Ưu và nhược điểm

  2. Truy vấn PostgreSQL rất chậm với giới hạn 1

  3. Trong Postgresql, buộc duy nhất trên sự kết hợp của hai cột

  4. Cách cấp tất cả các đặc quyền về chế độ xem cho người dùng tùy ý

  5. Làm cách nào để lấy một cột có các số liên tiếp, tăng dần mà không bị thiếu số nào?