PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвате подзаявки в SQLAlchemy за създаване на подвижна средна?

Точно така, очевидно това, от което имах нужда, беше използването на така наречения скалар изберете . С помощта на тях получавам този код на Python, който всъщност работи както искам (генерира еквивалентен SQL на този на първия във въпроса ми, което беше моята цел):

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)

Това дава този 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Работа с дати в PostgreSQL

  2. Кой е най-бързият начин за прилагане на 150 милиона актуализации на таблицата на PostgreSQL

  3. Създайте база данни, като използвате съхранена функция

  4. Функция MAX() в PostgreSQL

  5. Laravel 5.3 Eloquent транзакции и ограничения за външни ключове