通过加入Django ORM中的子查询来获得最新版本

时间:2016-07-18 18:34:55

标签: django django-orm

我有一个包含datetimeuser_id的日志条目表。我想通过SELECT * FROM table a JOIN (SELECT user_id, max(datetime) maxDate FROM table GROUP BY user_id) b ON a.user_id = b.user_id AND a.datetime = b.maxDate 进行查询以获取最新的每个日志条目。我似乎无法弄清楚如何做到这一点......

查询的SQL将是这样的:

reduce-kv

现在我正在使用原始查询,但我想使用ORM的方法。

3 个答案:

答案 0 :(得分:1)

我想这应该做

    Table.objects.order_by('-user_id').distinct('user_id')

请参阅此处的distinct() - > https://docs.djangoproject.com/en/1.9/ref/models/querysets/

但是,只有当该用户的最新日志条目是该用户在表中的最后一个条目,即表中按升序排序的特定用户的日志条目时,这才有效。

答案 1 :(得分:0)

您可以尝试:

 User.objects.latest().id

答案 2 :(得分:0)

Table.objects.order_by('user_id', '-datetime').distinct('user_id')

将索引添加到user_iddatetimeMeta.index_together = ['user_id', 'datetime'])。