10

(这是 django 版本的SQL 连接处的线程:选择一对多关系中的最后一条记录

假设我有一张客户表和一张采购表。每次购买都属于一位客户。我想获取所有客户的列表以及他们最后一次购买。可以在没有原始 SQL 和多个数据库查询的情况下完成吗?

4

3 回答 3

3

您不能在 Django 的一个查询中执行此操作。您可以通过客户最近一次购买的日期获得客户,如下所示:

from django.db.models import Max
customers = Customer.objects.annotate(Max('purchase__date'))

但是您不会通过这种方式自动获得实际购买的权限。

于 2010-01-21T19:09:13.093 回答
2

你可以看看类似的讨论:

从不同类别获取最新对象的 Django 查询

于 2010-01-22T00:06:05.637 回答
0
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

于 2010-01-21T18:09:46.120 回答