0

私はこのSQL式を持っています:

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 (Customer) と Historico_Acesso (Access_History) の 2 つのテーブルがあります。私が知りたいのは、最後にデータベースに話しかけた顧客の合計数で、日付ごとにグループ化されています。

このような:

合計日

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"

4

1 に答える 1

1

大げさな推測:nestedQuery.subquery()変数に抽出して、一度だけ呼び出されるようにしてください。

それがうまくいかない場合、SQLAlchemy は喜んで生成された SQL を出力しますprint query。次に、手作りの SQL クエリと比較できます。

于 2012-12-20T12:13:33.270 に答える