2012-03-09 16 views
0

2つのテーブルの両方にcreated_datetimeフィールドがあるとします。どちらも考慮に入れて、MAX(created_datetime)を入手するにはどうすればよいですか。 SQLではこれは、UNIONDjangoの2つのテーブルからMAXを取得する - SQL UNIONを使用するのと同じです。

で行います。これを行うにはDjangoモデルを使用することをお勧めしますが、必要に応じてこれをraw SQLで行うことができます。

答えて

0

これは他の情報がないと少し難しいですが、私はあなたがほしいと思うと思います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つのうち大きい方。

+0

これはdjangoについての質問だけでなくMySQLの質問です - 私はdjangoについて何も知らないので、おそらくあなたはこの構文をdjangoに翻訳する方法を知っています。 –

+0

Nope。それが質問の動機です。 – babonk

1

あなたは次のことを試すことができます。

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を参照して、役立つかどうかを確認することもできます。

+0

私はしばらくあなたの提案を使用していますが、質問を開いたままにします。人々があなたの答えに注意することは、両方のクエリーセットが空でないことを検証することです。そうでないと、 'datetime.datetimeとNoneTypeを比較できません。 – babonk

関連する問題