2015-07-20 3 views
1

У меня есть запрос следующего вида:Использование SQLAlchemy, как выполнить подзапрос окна PGSQL?

SELECT id, max(subq.foo), sum(subq.bar), etc... 
    FROM (
     SELECT id, 
      first_value(foo) over w as foo, 
      etc... 
     FROM my_table 
     WHERE <where information> 
     WINDOW w AS (PARTITION BY id 
        ORDER BY time_stamp ASC 
        RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) 
) as subq 

Как бы я сделать это с помощью этого SQLAlchemy? В частности, мой вопрос заключается в том, чтобы выполнить это окно во внутреннем запросе. У Sqlalchemy только есть аргументы для partition_by и order_by, и этот аргумент диапазона требуется.

Спасибо!

ответ

1

Закончилось это сделать:

# hack to get window supported 
subq = subq.filter(text("TRUE WINDOW w AS (PARTITION BY id " 
         "ORDER BY time_stamp ASC " 
         "RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)")) 

Это будет последний фильтр применяется к запросу, так что вы в конечном итоге с SQL, как это:

WHERE .... AND TRUE WINDOW w as (PARTITION BY id ORDER BY ...) 
Смежные вопросы