MySQL查询的Django中的等价ORM查询

时间:2015-11-23 23:28:35

标签: python mysql django django-queryset

我在django orm advance查询中表现不佳。

问题是:

选择最大列值与其他列不同的行,并按日期排序(desc)

我在stackoverflow see this

上找到了答案

MYSQL中的答案就是这个(从上面给出url)

SELECT tt.*
FROM topten tt
INNER JOIN
    (SELECT home, MAX(datetime) AS MaxDateTime
    FROM topten
    GROUP BY home) groupedtt 
ON tt.home = groupedtt.home 
AND tt.datetime = groupedtt.MaxDateTime

它的等效Django ORM查询..

我的模特是

class ModelStatus(models.Model):
    name = models.CharField(max_length=100, default='---')
    status = models.CharField(max_length=10, default='---')
    fall = models.CharField(max_length=100, default='---')
    rise = models.CharField(max_length=100, default='---')
    add_date = models.DateTimeField(auto_now_add=False, auto_now=True)
    error_message = models.TextField(default=' ')
    to = models.ForeignKey('model1',
                           related_name="status",
                           related_query_name="hstatus")

distinct列:名称

最大值列:add_date

EXAMPLE

id  name  add_date     status   fall_count | rise_count
---|-----|------------|--------|-----------|--------
1  | ab  | 04/03/2009 | up     | 399       | 100
2  | aa  | 04/03/2009 | down   | 244       | 200
3  | aa  | 03/03/2009 | down   | 555       | 210
4  | ba  | 03/03/2009 | up     | 300       | 256
5  | ab  | 03/03/2009 | up     | 200       | 145


OUTPUT

id  name  add_date     status   fall_count | rise_count
---|-----|------------|--------|-----------|--------
1  | ab  | 04/03/2009 | up     | 399       | 100
2  | aa  | 04/03/2009 | down   | 244       | 200
4  | ba  | 03/03/2009 | up     | 300       | 256

0 个答案:

没有答案