(这是 django 版本的SQL 连接处的线程:选择一对多关系中的最后一条记录)
假设我有一张客户表和一张采购表。每次购买都属于一位客户。我想获取所有客户的列表以及他们最后一次购买。可以在没有原始 SQL 和多个数据库查询的情况下完成吗?
(这是 django 版本的SQL 连接处的线程:选择一对多关系中的最后一条记录)
假设我有一张客户表和一张采购表。每次购买都属于一位客户。我想获取所有客户的列表以及他们最后一次购买。可以在没有原始 SQL 和多个数据库查询的情况下完成吗?
您不能在 Django 的一个查询中执行此操作。您可以通过客户最近一次购买的日期获得客户,如下所示:
from django.db.models import Max
customers = Customer.objects.annotate(Max('purchase__date'))
但是您不会通过这种方式自动获得实际购买的权限。
你可以看看类似的讨论:
SELECT *
FROM customers с
LEFT JOIN
purchases p
ON p.id =
(
SELECT id
FROM purchases pl
WHERE pl.customer = c.id
ORDER BY
pl.customer DESC, pl.date DESC
LIMIT 1
)
确保你有一个关于你的表是否是的复合索引purchases (customer, date)
,InnoDB
或者purchases (customer, date, id)
你的表是否是MyISAM
。