PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Rata-rata bergerak di 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

Apa yang salah dengan kueri OP adalah spesifikasi bingkai:

ROWS BETWEEN 0 PRECEDING AND 2 FOLLOWING

Selain itu, kueri saya menghindari komputasi yang tidak diperlukan dengan memfilter hari Kamis sebelum menerapkan fungsi jendela yang mahal.

Jika perlu dipartisi dengan shop_id maka jelas tambahkan partition by shop_id untuk kedua fungsi, avg dan row_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. Tidak dapat menghubungkan Aplikasi Android Studio saya dengan PostgreSQL

  2. Membangun Database yang Sangat Tersedia untuk Moodle Menggunakan PostgreSQL

  3. Dekode setara di postgres

  4. Bagaimana saya membuat hasil kueri SQL dengan LIMIT berbeda di setiap kueri?

  5. TypeORM PostgreSQL pilih di mana bidang JSON sama dengan beberapa nilai