Como usar subconsultas no SQLAlchemy para produzir uma média móvel?

Meu problema é que eu quero recuperar tanto uma lista de medidas quanto uma média móvel dessas medidas. Eu posso fazer isso com esta instrução SQL (sintaxe do intervalo postgresql):

SELECT time, value,                
   (
       SELECT AVG(t2.value)
       FROM measurements t2
       WHERE t2.time BETWEEN t1.time - interval '5 days' AND t1.time
   ) moving_average
FROM measurements t1
ORDER BY t1.time;

Eu quero ter o código SQLAlchemy para produzir uma declaração semelhante para esse efeito. Atualmente, tenho este código Python:

moving_average_days = # configureable value, defaulting to 5
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))],
            t1.c.time > (datetime.datetime.utcnow() - datetime.timedelta(ndays))). \
        order_by(Measurements.c.time)

Isso, no entanto, gera este SQL:

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

O SQL tem a subconsulta como parte da cláusula FROM, na qual não pode ter acesso escalar aos valores da coluna dos valores de nível superior, ou seja, faz com que o PostgreSQL cite este erro:

ERROR:  subquery in FROM cannot refer to other relations of same query level
LINE 6:         WHERE t2.time BETWEEN t1.time - interval '5 days' AN...

O que eu gostaria de saber é: como faço para que o SQLAlchemy mova a subconsulta para a cláusula SELECT?

Como alternativa, outra maneira de obter uma média móvel (sem executar uma consulta para cada par (tempo, valor)) seria uma opção.

questionAnswers(1)

yourAnswerToTheQuestion