sql - 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。
解决方案
我会建议一个相关的子查询:
SELECT t.*
FROM Table as t
WHERE t.ReceiveDate = (SELECT MAX(t2.ReceiveDate)
FROM Table as t2
WHERE t2.PartNo = t.PartNo
);
特别是,这可以利用上的索引(PartNo, ReceiveDate)
。
推荐阅读
- java - 克隆 java.time.LocalDateTime 的最佳方法
- kubernetes - Kubernetes 网络策略出口只允许特定 IP 和端口
- php - MYSQL - 从父母那里获取所有孩子
- php - 使用拖放更新数据顺序
- javascript - 在 drupal 7 中创建目录并存储 javascript 文件
- delphi - OSX 上的 Delphi FMX 和 Indy 返回套接字错误,但在 PC 上不返回
- angular - SystemJsNgModuleLoader.load() 因“找不到模块”而失败
- webview - Flutter:离开页面时关闭 webview
- apache-camel - Apache ActiveMQ Artemis 相当于 Prefetch Policy
- php - 带值的 PHP 数组 / MongoDB / Symfony