假設我有兩個表都具有created_datetime
字段。我怎樣才能得到MAX(created_datetime)
,他們都考慮到了。在SQL中,這是用UNION
從Django中的兩個表中獲取MAX() - 相當於使用SQL UNION
我寧願使用Django模型來做到這一點,但如果需要,我可以用原始SQL做到這一點。
假設我有兩個表都具有created_datetime
字段。我怎樣才能得到MAX(created_datetime)
,他們都考慮到了。在SQL中,這是用UNION
從Django中的兩個表中獲取MAX() - 相當於使用SQL UNION
我寧願使用Django模型來做到這一點,但如果需要,我可以用原始SQL做到這一點。
沒有任何其他信息,這有點難,但我認爲你想要GREATEST
。
MAX
沿着行操作(即它將許多行變成一行),並且GREATEST
沿列操作(將許多列變成一列)。
如果你想單最大created_datetime
了兩個表,你會怎麼做:
SELECT GREATEST(MAX(t1.created_datetime), MAX(t2.created_datetime))
FROM t1
JOIN t2 ON ....
....
的MAX(t1.created_datetime)
抓起,從T1最大日期時間,在MAX(t2.created_datetime)
抓住從T2最大,並得到GREATEST
這兩個中較大的一個。
你可以嘗試以下方法:
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模型函數( from django.db.models.aggregates import Max
必須用於Max
)。
你也可以做類似如下:
max(Model1.objects.all().values_list('created_datetime',flat=True).extend(Model2.objects.all().values_list('created_datetime',flat=True)))
在這裏,聚集未被使用(因此,不使用Max
)。 python的max
仍然被使用,並且像sql的UNION之類的東西仍然沒有被看到,但是,已經使用了2個列表的連接。
你可以看到什麼適合你最好或其他第三種解決方案,如果有任何下降。我真的很想知道甚至比以上更好的解決方案。 :)
您也可以參考link以查看它是否對您有所幫助。
我暫時使用你的建議,但會讓問題變得開放。讓人們提防答案的一件事是驗證兩個查詢集都不是空的,否則你會得到一個錯誤:'不能比較datetime.datetime和NoneType' – babonk 2012-03-09 19:51:29
哦,我看到這是一個Django問題以及MySQL問題 - 我對django一無所知,所以也許你知道如何將這個語法翻譯成django。 – 2012-03-09 00:56:50
沒有。這是問題的動機。 – babonk 2012-03-09 01:04:49