2012-12-20 64 views
0

我有这样的SQL表达式:SQLAlchemy的嵌套查询返回错误数据

SELECT count(*), date_trunc('day', data) 
from (
select max(hc.acesso) as data 
from historico_comunicacao hc 
join cliente c on (c.id = hc.id_cliente) 
group by c.id 
having max(hc.acesso) between ('2012-11-30') and ('2012-12-07 23:59:59') 
order by max(hc.acesso) desc 
) as x 


GROUP BY 2 
ORDER BY 2 DESC; 

所以,我这样做是在SQLAlchemy中:

nestedQuery = session.query(func.max(MapComunicacao.acesso).label('data'))\ 
.join(MapCliente)\ 
.group_by(MapCliente.id)\ 
.having(func.max(MapComunicacao.acesso).between(dataini, dataFinal))\ 
.order_by(desc(func.max(MapComunicacao.acesso))) 

query = session.query(
    func.count(nestedQuery.subquery().columns.data), 
     extract('day', nestedQuery.subquery().columns.data) 
)\ 
.group_by('anon_3.data') 


result = query.all() 

不会发生错误,但返回的数据是错误的我。

我有两个表:Cliente(客户)和Historico_Acesso(Access_History)。我想知道的是最后一次与我的数据库交谈的客户总数,按日期分组。

像这样:

总计日期

19; “2012-12-07 00:00:00 + 00”

16; “2012-12-06 00:00:00 + 00”

20; “2012-12-05 00:00:00 + 00”

06; “2012-12-04 00:00:00 + 00”

06; “2012-12-03 00:00:00 + 00”

01; “2012-12-02 00:00:00 + 00”

04; “2012-12-01 00:00:00 + 00”

09; “2012年11月30日00:00:00 + 00”

回答

1

狂猜:尝试将nestedQuery.subquery()提取到变量中,以便它只被调用一次。

如果这不起作用,SQLAlchemy会很乐意使用print query为您打印生成的SQL。然后,您可以与您的手工SQL查询进行比较。

+1

感谢您的答复。你的提示工作得很好。 – ECC