sql >> データベース >  >> RDS >> PostgreSQL

SQLAlchemyでサブクエリを使用して移動平均を生成するにはどうすればよいですか?

    そうです、どうやら私が必要としていたのは、いわゆるスカラーの使用でした。選択 。それらを使用すると、このpythonコードが得られます。これは、実際には希望どおりに機能します(私の目標である、質問の最初のSQLと同等の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. MySQL-2つのフィールドをCONCATし、WHERE句で使用します

    2. CTE への INDEX の追加

    3. JDBCを使用してすべての外部キーを取得します

    4. Oracleラグ関数のような結果セットを取得する方法