首页 > 解决方案 > SQL:根据最近的日期选择具有一个唯一字段的多个字段

问题描述

我正在尝试编写一个 SQL 语句来根据最近的日期选择一个唯一的部件号。如果我只有 PartNo 和 ReceiveDate 这两个字段,我可以这样做:

"SELECT PartNo, Max(ReceiveDate) FROM Table GROUP BY PartNo;"

这将返回唯一的 PartNo 和最近的日期。

问题是我还想包含 VendorName 和 Qty 字段(但我只希望 PartNo 是唯一的)。我试过了:

"SELECT PartNo, VendorName, Qty, Max(ReceiveDate) FROM Table GROUP BY PartNo;"

"SELECT PartNo, VendorName, Qty, Max(ReceiveDate) FROM Table GROUP BY PartNo, VendorName, Qty;"

我理解为什么这两个 SELECT 语句是错误的,第一个没有运行,因为 VendorName 和 Qty 不在 GROUP BY 子句或聚合函数的一部分中,而在第二个中它根据 PartNo AND 选择唯一记录VendorName AND Qty,而不仅仅是 PartNo。

如果有人可以帮助我编写正确的 SQL 语句,那将不胜感激。我正在使用 Microsoft Access,它使用与 T-SQL 非常相似的 Jet SQL。

标签: sqlms-access

解决方案


我会建议一个相关的子查询:

SELECT t.*
FROM Table as t
WHERE t.ReceiveDate = (SELECT MAX(t2.ReceiveDate)
                       FROM Table as t2
                       WHERE t2.PartNo = t.PartNo
                      );

特别是,这可以利用上的索引(PartNo, ReceiveDate)


推荐阅读