2013-04-02 69 views
10

我正在使用Django和MySQL。我有類似如下的模式:Django ORM查詢GROUP BY多列合併MAX

class MM(models.Model): 
    a = models.IntegerField() 
    b = models.IntegerField() 
    c = models.DateTimeField(auto_now_add=True) 

我有多行a等於b,我想執行下面的SQL查詢:

SELECT a, b, MAX(c) AS max FROM MM GROUP BY b, a; 

怎麼可以這樣用做Django ORM?我嘗試了使用註釋的不同方法,但現在運氣如此。

非常感謝!

回答

9

我認爲你可以這樣做:你需要進口一些使用最大

MM.objects.all().values('b', 'a').annotate(max=Max('c')) 

注:from django.db.models import Max

values('b', 'a')會給GROUP BY b, aannotate(...)將計算MAX在您的查詢。

+3

FYI的'所有()'是多餘的,不是必需的。 – mynameistechno

0

按兩個字段總和一個字段組。

from django.db.models import Sum 

SQL

select caja_tipo_id, tipo_movimiento, sum(monto) from config_caja group by caja_tipo_id, tipo_movimiento 

Django的

objs = Caja.objects.values('caja_tipo__nombre','tipo_movimiento').order_by().annotate(total=Sum('monto')) 
2

你可以試試這個也

from django.db.models import Max 

mm_list=MM.objects.all().values('b','a').annotate(max=Max('c')) 
for mm in mm_list: 
    a=mm['a'] 
    b=mm['b'] 
    max=mm['max']