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

Bagaimana cara menggunakan subquery di SQLAlchemy untuk menghasilkan rata-rata bergerak?

Benar, ternyata yang saya butuhkan adalah penggunaan yang disebut skalar pilih . Dengan penggunaan yang saya dapatkan kode python ini, yang benar-benar berfungsi seperti yang saya inginkan (menghasilkan SQL yang setara dengan yang pertama dalam pertanyaan saya yang merupakan tujuan saya):

moving_average_days = # configurable value, defaulting to 5
ndays = # configurable value, defaulting to 90
t1 = Measurements.alias('t1') ######
t2 = Measurements.alias('t2')
query = select([t1.c.time, t1.c.value,
                    select([func.avg(t2.c.value)],
                        t2.c.time.between(t1.c.time - datetime.timedelta(moving_average_days), t1.c.time)).label('moving_average')],
            t1.c.time > (datetime.datetime.utcnow() - datetime.timedelta(ndays))). \
        order_by(t1.c.time)

Ini memberikan SQL ini:

SELECT t1.time, t1.value,
    (
        SELECT avg(t2.value) AS avg_1
        FROM measurements AS t2 
        WHERE t2.time BETWEEN t1.time - :time_1 AND t1.time
    ) AS moving_average 
FROM measurements AS t1
WHERE t1.time > :time_2 ORDER BY t1.time;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah PK referensi Kunci Asing memerlukan batasan NOT NULL?

  2. Peningkatan otomatis pada kunci primer parsial dengan Entity Framework Core

  3. Ukuran transaksi maksimum di PostgreSQL

  4. Mewakili Data Jarang di PostgreSQL

  5. Apa itu LEFT JOIN di PostgreSQL