Django查询:按列表获取所有不同值的最后一个条目

时间:2017-06-21 01:16:51

标签: django django-models

我正在尝试创建一个Django查询,以获取MySQL数据库中每个不同值的最后一个条目的列表。我将在下面展示一个例子,因为这个解释可能非常复杂。使用.values()显然在Django中自己获取不同的值是没有问题的。我想创建几个Django查询,但这看起来很麻烦。有没有一种简单的方法可以做到这一点。

以下示例。假设我希望具有不同名称的行与其最后一个条目(最新日期)。

Name            email                 date
_________________________________________________

Dane            dane@yahoo.com        2017-06-20
Kim             kim@gmail.com         2017-06-10
Hong            hong@gmail.com        2016-06-25
Dane            dddd@gmail.com        2017-06-04
Susan           Susan@gmail.com       2017-05-21
Dane            kkkk@gmail.com        2017-02-01
Susan           sss@gmail.com         2017-05-20

所有不同的价值观都是Dane,kim,Hong,Susan。我还希望具有与这些不同名称相关联的最新日期的行。我想要的条目列表是下面的行。注意名称都是不同的,它们与最新日期相关联。

 Name            email                 date
_________________________________________________

Dane            dane@yahoo.com        2017-06-20
Kim             kim@gmail.com         2017-06-10
Hong            hong@gmail.com        2016-06-25
Susan           Susan@gmail.com       2017-05-21

3 个答案:

答案 0 :(得分:2)

使用django模型,无论你使用什么sql数据库,你都可以这样做:

 EmailModel.objects.all().order_by('date').distinct('Name')

有关此类更多方法/功能,您可以访问the docs here

答案 1 :(得分:1)

这仅适用于POSTGRES

您可以使用ORDER_BY命令按日期排序查询集,然后使用DISTINCT命令链接以获取不同的行并指定哪个字段。 DISTINCT命令将为每个名称输入第一个条目。请参阅The Docs For More

修改

对于MYSQL,您必须使用原始SQL查询,请参阅here

答案 2 :(得分:1)

只有Postgres支持在distinct中提供字段名称。此外,valuesorder_by中提供的任何字段都是不同的,因此有时会提供模棱两可的结果。

然而对于MySQL:

Model.objects.values('names').distinct().latest('date')