小编Gie*_*iel的帖子

如何在SQLAlchemy中使用子查询来生成移动平均线?

我的问题是我想要检索测量列表以及这些测量的移动平均值.我可以用这个SQL语句(postgresql interval语法)来做到这一点:

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;
Run Code Online (Sandbox Code Playgroud)

我想让SQLAlchemy代码为此效果生成类似的语句.我目前有这个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)
Run Code Online (Sandbox Code Playgroud)

但是,生成此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 …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy subquery

4
推荐指数
1
解决办法
5779
查看次数

标签 统计

postgresql ×1

python ×1

sqlalchemy ×1

subquery ×1