从Django中的两个表中获取MAX() - 相当于使用SQL UNION

时间:2012-03-09 00:50:32

标签: mysql sql django django-models

假设我有两个表都有created_datetime字段。我怎样才能得到MAX(created_datetime),同时考虑到这两者。在SQL中,这是通过UNION

完成的

我更愿意使用Django模型来执行此操作,但如果需要,我可以使用原始SQL执行此操作。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

max(Model1.objects.aggregate(max_date = Max('created_datetime'))['max_date'], Model2.objects.aggregate(max_date = Max('created_datetime'))['max_date'])

这不是UNION,但是你得到了你需要的东西。

NB max是一个python函数,Max是django模型函数( from django.db.models.aggregates import Max必须使用Max)。< / p>

您还可以执行以下操作:

max(Model1.objects.all().values_list('created_datetime',flat=True).extend(Model2.objects.all().values_list('created_datetime',flat=True)))

此处,尚未使用聚合(因此,未使用Max)。仍然使用了max的python,并且仍然没有看到类似于UNION的sql,但是,已经使用了2个列表的连接。

你可以看到适合你的东西或其他一些第三种解决方案。我真的很想知道比上面更好的解决方案。 :)

您还可以参考link,看看它是否对您有帮助。

答案 1 :(得分:0)

没有任何其他信息会有点困难,但我认为你想要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获得这两者中较大的一个。