假设我有两个表都具有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