在MS Access中,我有DateList表,它保存不同订单的到期日期。因此,该表有两列:OrderNo和DueDate。对于某些订单号,可能有多个duedate。表可能如下所示:
OrderNo DueDate
100 12/9/2021
101 20/9/2021
102 30/9/2021
100 7/10/2021
102 11/10/2021
103 15/10/2021
…
我的目标是编写一个查询来获取每个OrderNr的最新DueDate。
创建了两个查询;第一个qry1,生成一个没有重复的OrdNo列表:
SELECT
DateList.OrderNo AS UniqOrderNo
FROM DateList
GROUPBY DateList.OrderNo;
第二个查询中的qry2,我使用DMax函数来搜索每个订单的DueDates的最大值。
SELECT
qry1.UniqOrderNo
,DMax("[DueDate]","[DateList]","[OrderNo]='[qry1]![UniqOrderNo]'") AS LatDuDate
FROM qry1
INNER JOIN DateList
ON qry1.UniqOrderNo = DateList.OrderNo;
LatDuDate表示订单的最新DueDate。
查询是不幸的不工作,没有返回任何东西。
现在我的问题:
我的方法/查询有问题吗?
在MS Access中有更好的方法来完成这个任务吗?
你几乎自己弄明白了。Max返回组中最大的值。
SELECT Max(DueDate) DueDate, OrderNo
FROM DateList
GROUP BY OrderNo
与Christian的回答类似,但由于OrderNo
是唯一的id,您可以简单地选择First()
而不是分组-它执行得更好。* *
当然,这取决于表中保存的记录的数量。
SELECT First(OrderNo) AS OrderNo, Max(DueDate) AS DueDate
FROM DateList;
**来源:Allen Browne - optimization queries