sql >> Database >  >> RDS >> PostgreSQL

Hoe subquery's in SQLAlchemy gebruiken om een ​​voortschrijdend gemiddelde te produceren?

Juist, wat ik blijkbaar nodig had, was het gebruik van een zogenaamde scalar selecteer . Met het gebruik hiervan krijg ik deze python-code, die eigenlijk werkt zoals ik het wil (genereert de equivalente SQL van die van de eerste in mijn vraag, wat mijn doel was):

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)

Dit geeft deze SQL:

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. Hoe SQLite-queryresultaten op te maken in TCL-modus

  2. [01000][unixODBC][Driver Manager]Kan lib '/usr/local/easysoft/oracle/InstantClient112/lib/libsqora.so' niet openen:bestand niet gevonden

  3. Maak een nieuwe MySQL-database met Workbench

  4. SUM(NULL) begrijpen in MySQL