【发布时间】:2021-12-17 23:40:59
【问题描述】:
型号:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100)
class Result(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
outcome = models.IntegerField()
time = models.DateTimeField()
Sql:
select * from person as p
inner join (
select person_id, max(time) as max_time, outcome from result
group by person_id
) r on p.id = r.person_id
where r.result in (2, 3)
我想获取最后结果为 2 或 3 的所有人记录。我添加了上面的原始 sql 以进一步解释。
我查看了使用子查询来过滤具有匹配结果 id 的人员记录
sub_query = Result.objects.values("person_id").annotate(max_time=Max("time"))
但是使用值会去除其他字段。
理想情况下,我可以在一个人的查询集中做到这一点,但我认为情况并非如此。
【问题讨论】:
标签: django django-orm