PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

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

ओपी की क्वेरी में क्या गलत है वह है फ्रेम विनिर्देश:

ROWS BETWEEN 0 PRECEDING AND 2 FOLLOWING

इसके अलावा मेरी क्वेरी महंगे विंडो फ़ंक्शंस को लागू करने से पहले गुरुवार को फ़िल्टर करके अनावश्यक कंप्यूटिंग से बचाती है।

यदि shop_id द्वारा विभाजन करना आवश्यक है तो स्पष्ट रूप से partition by shop_id जोड़ें दोनों कार्यों के लिए, avg और 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. पोस्टग्रेज में \time का उपयोग कैसे करें

  2. रेल/ActiveRecord में अनुमत एनयूएलएल के साथ अद्वितीय अनुक्रमणिका निर्दिष्ट करना संभव है?

  3. कॉपी बैच डालने के पोस्टग्रेज के दौरान प्राथमिक कुंजी कैसे बढ़ाएं?

  4. आप सक्रिय उपयोगकर्ताओं को SQL के माध्यम से postgreSQL डेटाबेस से कैसे कनेक्ट कर सकते हैं?

  5. पोस्टग्रेएसक्यूएल रिवर्स लाइक