2015-07-20 43 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 ...) 
相关问题