SQL:根据最近的日期选择一个字段中的值是唯一的记录
Posted
技术标签:
【中文标题】SQL:根据最近的日期选择一个字段中的值是唯一的记录【英文标题】:SQL: Selecting record where values in one field are unique based off of most recent date 【发布时间】:2020-12-08 22:31:42 【问题描述】:我正在尝试编写一条 SQL 语句来选择记录,以便每条记录都有一个唯一的 PartNo,并且我希望该记录基于最近的 ReceiveDate。当我问this问题时,我得到了答案:
SELECT t.*
FROM Table as t
WHERE t.ReceiveDate = (SELECT MAX(t2.ReceiveDate)
FROM Table as t2
WHERE t2.PartNo = t.PartNo
);
但是,此答案假定对于每个 ReceiveDate,您不会有两次相同的 PartNo。在多条记录具有相同的 PartNo 和 ReceiveDate 的情况下,选择哪个并不重要,但我只想选择一个(PartNo 必须是唯一的)
例子:
PartNo | Vendor | Qty | ReceiveDate
100 | Bob | 2 | 2020/07/30
100 | Bob | 3 | 2020/07/30
应该只返回这些记录之一。
我正在使用 Microsoft Access,它使用与 T-SQL 非常相似的 Jet SQL。
【问题讨论】:
你有任何唯一定义每一行的列吗? @GordonLinoff 没有。不幸的是,我也不能添加一个,这些数据来自我们的 ERP 系统,我无法编辑。以下是一些记录的示例:ibb.co/c37nRGv 。 .这使得这在 MS Access 中非常很棘手。 【参考方案1】:手动设置标准聚合查询(功能区中的 sigma 图标),其中按部件号分组,日期字段设置为 MAX...
运行查询以检查它是否返回了您寻求的值...然后在设计视图中 - 选择 SQL 视图,这将为您提供 sql 语句...
【讨论】:
【参考方案2】:使用NOT EXISTS
:
select distinct t.*
from tablename as t
where not exists (
select 1 from tablename
where partno = t.partno
and (
receivedate > t.receivedate
or (receivedate = t.receivedate and qty > t.qty)
or (receivedate = t.receivedate and qty = t.qty and vendor > t.vendor)
)
)
【讨论】:
以上是关于SQL:根据最近的日期选择一个字段中的值是唯一的记录的主要内容,如果未能解决你的问题,请参考以下文章