私はpythonでpostgresデータベースとsqlalchemyを使用しています。postgres/sqlalchemy/python:ユニオンクエリのgroup-by/max?
2つのテーブルからユニオンクエリを実行したいのですが、共通キーを持つ列の最大値を持つ行を選択したいとします。私はsqlalchemyでこの作業を行う方法を理解することができませんでした。
テーブルusers
のテーブルオブジェクトとテーブルorders
のテーブルオブジェクトがあるとします。
union_query = union(
select([users.c.email, users.c.timestamp]),
select([orders.c.email, orders.c.timestamp])
)
しかし、いくつかのケースでは、timestamp
値が異なるemail
列共通があるかもしれません。この場合、結果は任意のemail
に対して最大timestamp
を表示するようにします。例えば
、users
表は、このデータが含まれているとします
email | timestamp
--------| ---------
[email protected] | 00:00:00
[email protected] | 02:03:04
[email protected] | 10:10:10
...とorders
表は、このデータが含まれているとします
email | timestamp
--------| ---------
[email protected] | 12:12:12
[email protected] | 01:01:01
[email protected] | 09:09:09
私は労働組合ベースの結果をしたいです次のようにクエリします。
email | timestamp
--------| ---------
[email protected] | 12:12:12
[email protected] | 02:03:04
[email protected] | 10:10:10
[email protected] | 09:09:09
私はされていませんgroup_by()
、func.max()
、およびこのクエリを生成するために私のunion_query
と共に使用する他のsqlalchemy関数を適切に組み合わせることができます。
ご協力いただきありがとうございます。
ここで 'updated_at'カラムはどこから来たのですか? 'timestamp'という名前にする必要がありますか? –
はい、 'updated_at'が間違っています。私はそれを修正しました。私は、他の変数名を使った実際のコードのより複雑な部分からこの例を構成しました。私はそれらの1つを見逃しました。 – HippoMan