SQL:根据最近的日期选择唯一字段值的记录

3

我正在尝试编写一条SQL语句,选择记录以使得每个记录都具有唯一的PartNo,并且我希望该记录基于最近的ReceiveDate。当我询问这个问题时,我得到了答案:

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,它使用Jet SQL语言,该语言与T-SQL非常相似。


你有没有任何列可以唯一定义每一行? - Gordon Linoff
@GordonLinoff 没有。不幸的是,我也不能添加一个,这些数据来自我们的ERP系统,我无法编辑。这里是一些记录的示例:https://ibb.co/c37nRGv - person1234568475
这在MS Access中非常棘手。 - Gordon Linoff
2个回答

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)
  )
)

-1

手动设置标准聚合查询(在功能区中的σ图标),按零件编号进行分组,并将日期字段设置为最大值...

运行查询以检查是否返回所需的值...然后在设计视图中选择SQL视图,这将提供给您SQL语句...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接