2つのテーブルの両方にcreated_datetime
フィールドがあるとします。どちらも考慮に入れて、MAX(created_datetime)
を入手するにはどうすればよいですか。 SQLではこれは、UNION
Djangoの2つのテーブルからMAXを取得する - SQL UNIONを使用するのと同じです。
で行います。これを行うにはDjangoモデルを使用することをお勧めしますが、必要に応じてこれをraw SQLで行うことができます。
2つのテーブルの両方にcreated_datetime
フィールドがあるとします。どちらも考慮に入れて、MAX(created_datetime)
を入手するにはどうすればよいですか。 SQLではこれは、UNION
Djangoの2つのテーブルからMAXを取得する - SQL UNIONを使用するのと同じです。
で行います。これを行うにはDjangoモデルを使用することをお勧めしますが、必要に応じてこれをraw SQLで行うことができます。
これは他の情報がないと少し難しいですが、私はあなたがほしいと思うと思いますGREATEST
。
MAX
は行に沿って動作します(つまり、多くの行が1つの行に変わります)。GREATEST
は列に沿って動作します(多くの列が1つの列になります)。
あなたは、両方のテーブルのうち単一最大created_datetime
をしたい場合は、あなたがしたい:MAX(t1.created_datetime)
はt1から最大日時をつかむ
SELECT GREATEST(MAX(t1.created_datetime), MAX(t2.created_datetime))
FROM t1
JOIN t2 ON ....
....
、MAX(t2.created_datetime)
をt2から最大グラブ、そしてGREATEST
を取得これらの2つのうち大きい方。
あなたは次のことを試すことができます。
max(Model1.objects.aggregate(max_date = Max('created_datetime'))['max_date'], Model2.objects.aggregate(max_date = Max('created_datetime'))['max_date'])
これはUNION
を行いませんが、あなたが必要なものを取得。
N.B.:max
はPython関数で、Max
はdjangoモデル関数(Max
には from django.db.models.aggregates import Max
を使用する必要があります)です。
また、次のような何かを行うことができます:
ここmax(Model1.objects.all().values_list('created_datetime',flat=True).extend(Model2.objects.all().values_list('created_datetime',flat=True)))
、集約が使用されていない(ので、Max
は使用されません)。 max
のPythonがまだ使用されており、UNION of sqlのようなものはまだ見られませんが、2つのリストの結合が使用されています。
あなたがベストに合ったものか、他の何か3番目の解決策があるかどうかを確認できます。私は本当に上記より良い解決法を知りたいと思う。 :)
linkを参照して、役立つかどうかを確認することもできます。
私はしばらくあなたの提案を使用していますが、質問を開いたままにします。人々があなたの答えに注意することは、両方のクエリーセットが空でないことを検証することです。そうでないと、 'datetime.datetimeとNoneTypeを比較できません。 – babonk
これはdjangoについての質問だけでなくMySQLの質問です - 私はdjangoについて何も知らないので、おそらくあなたはこの構文をdjangoに翻訳する方法を知っています。 –
Nope。それが質問の動機です。 – babonk