我在数据库中有以下字段和数据:
FirstName LastName Date
John Davis 10-10-2011
Joe Gray 20-09-2011
Ann Davis 03-04-2010
Ann Bovis 01-04-2010
如何从具有最新日期和唯一姓氏的 DB 3 项目中进行选择,并在结果中包含所有其他字段。这意味着,如果结果中有多个带有 LastName Davis 的项目,则应该只有一个具有最新日期的项目。 甚至不知道如何在纯 SQL 上做到这一点 - Django 看起来根本不可能。
编辑1。 SQL 查询。
我在纯 SQL 上编写了查询:
SELECT TOP 3 *
FROM peopleTable as a1
WHERE (select count(*)FROM peopleTable as a2 where a2.LastName=a1.LastName and a2.Date > a1.Date)<=0
ORDER by Date desc
我想如果我在 django 中像纯 SQL 一样使用这个查询会更好。
最佳答案
你可以这样做:
latest date and unique last name
或
all other fields
但你不能两者兼得。如果您想获取姓氏 Davis 的最新日期,还应检索哪些其他字段,firstname=John 还是firstname=Ann?
我猜测您希望结果如下所示:
FirstName LastName Date
John Davis 10-10-2011
Joe Gray 20-09-2011
Ann Bovis 01-04-2010
安·戴维斯 (Ann Davis) 行已消失,因为她不是表中最新的戴维斯。对吗?
在这种情况下,你的原始 SQL 看起来像:
SELECT FirstName, LastName, Date
FROM
Table T1
WHERE
NOT EXISTS (
SELECT * FROM Table T2 WHERE T2.LastName=T1.LastName AND T2.Date > T1.Date
)
您可以使用 Item.objects.raw() 在 Django 中编写该内容选项。您还可以使用extra(where=…)
关于sql - Django 。数据库查询: distinct for one field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052891/