2012-03-09 50 views

回答

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这两个中较大的一个。

+0

哦,我看到这是一个Django问题以及MySQL问题 - 我对django一无所知,所以也许你知道如何将这个语法翻译成django。 – 2012-03-09 00:56:50

+0

没有。这是问题的动机。 – babonk 2012-03-09 01:04:49

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模型函数( 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以查看它是否对您有所帮助。

+0

我暂时使用你的建议,但会让问题变得开放。让人们提防答案的一件事是验证两个查询集都不是空的,否则你会得到一个错误:'不能比较datetime.datetime和NoneType' – babonk 2012-03-09 19:51:29

相关问题