【发布时间】:2020-06-06 00:39:32
【问题描述】:
所以我在 Django 中有以下模型:
class MemberLoyalty(models.Model):
date_time = models.DateField(primary_key=True)
member = models.ForeignKey(Member, models.DO_NOTHING)
loyalty_value = models.IntegerField()
我的目标是让所有元组按日期最近的成员分组。有很多方法可以做到这一点,其中一种是使用子查询,该查询由具有 max date_time 的成员分组,并使用其结果过滤 member_loyalty。该解决方案的工作sql如下:
SELECT
*
FROM
member_loyalty
WHERE
(date_time , member_id) IN (SELECT
max(date_time), member_id
FROM
member_loyalty
GROUP BY member_id);
另一种方法是加入子查询。
我如何在 django 查询中翻译这个?我找不到使用 IN 过滤两个字段的方法,也找不到使用特定 ON 语句加入子查询的方法。
我试过了:
cls.objects.values('member_id', 'loyalty_value').annotate(latest_date=Max('date_time'))
但它开始按忠诚度值分组。
也尝试构建子查询,但找不到如何加入它或在过滤器上使用它:
subquery = cls.objects.values('member_id').annotate(max_date=Max('date_time'))
另外,我使用的是 Mysql,所以我不能使用 .distinct('param') 方法。
【问题讨论】:
标签: sql django python-3.x django-orm