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

Trung bình động trong postgresql

SQL Fiddle

select
    "date",
    shop_id,
    amount,
    extract(dow from date),
    case when
        row_number() over (order by date) > 3
        then
            avg(amount) OVER (
                ORDER BY date DESC
                ROWS BETWEEN 1 following AND 3 FOLLOWING
            )
        else null end
from (
    select *
    from ro
    where extract(dow from date) = 4
) s

Điều gì sai với truy vấn của OP là đặc tả khung:

ROWS BETWEEN 0 PRECEDING AND 2 FOLLOWING

Ngoài ra, truy vấn của tôi tránh tính toán không cần thiết bằng cách lọc các ngày Thứ Năm trước khi áp dụng các hàm cửa sổ đắt tiền.

Nếu cần phân vùng theo shop_id thì rõ ràng thêm phân vùng partition by shop_id cho cả hai chức năng, avgrow_number .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thay đổi cơ sở dữ liệu (postgresql) trong python bằng cách sử dụng psycopg2 động

  2. Django:Tôi gặp lỗi [quan hệ auth_group không tồn tại] sau khi syncdb

  3. Hủy một phiên / kết nối postgresql

  4. Sử dụng truy vấn Hibernate:dấu hai chấm được coi là tham số / dấu hai chấm thoát

  5. Không thể chạy bộ lập lịch web2py bằng cơ sở dữ liệu postgresql