我花了一天的大部分时间浏览这个网站和许多其他网站,但还没有找到解决我问题的方法。
我目前正在尝试在 MS Access 上运行一个查询,该查询将提取以下列:
问题是我需要里程碑成为最近的里程碑。due_date 对应于这个里程碑。
每个里程碑都使用自动编号 ID 输入,我一直在尝试使用此 ID 来汇总我的查询。
这个查询:
SELECT E.EID, E.[CN], E.[AN], E.Status, MAX(M.ID) AS Milestone_ID
FROM [Pilot Milestone] AS M, [PP Engagements] AS E, [Pilot Milestone] AS D
WHERE E.EID=M.EID
GROUP BY M.EID, E.EID, E.[CN], E.[AN], E.Status, E.[Estimated Hours]
为我提供每个 EID 的最新里程碑 ID。但是,如果我添加 Due_Dates:
SELECT E.EID, E.[CN], E.[AN], E.Status, MAX(M.ID) AS Milestone_ID, M.(Due Date)
FROM [Pilot Milestone] AS M, [PP Engagements] AS E, [Pilot Milestone] AS D
WHERE E.EID=M.EID
GROUP BY M.EID, E.EID, E.[CN], E.[AN], E.Status, E.[Estimated Hours], M.(Due Date)
我收到了 EID 30 的另外两条记录。这是仅有的两条带有截止日期的记录,它们都没有反映最新的里程碑 ID。
此外,每个 EID 都有多个里程碑,因此,如果我在查询中输入里程碑描述的方式与使用截止日期相同,我会遇到类似的问题。
任何帮助是极大的赞赏。
谢谢
修改
以下查询为我提供了我刚刚在 MS Access 2007 中测试的 Due_dates 的结果,没有任何重复。但是,无论它是否来自最近的里程碑,查询都会提取最近的日期。
SELECT E.EID, E.[Client Name], E.[Audit Name], E.Status, MAX(M.ID) AS Milestone_ID, (
SELECT MAX ([Due Date]) FROM [Pilot Milestone] AS M2 WHERE M2.EID = M.EID) AS Due_Date
FROM [Pilot Milestone] AS M, [Potential Pilot Engagements] AS E
WHERE E.EID=M.EID
GROUP BY M.EID, E.EID, E.[Client Name], E.[Audit Name], E.Status, E.[Estimated Hours]
此外,我不确定如何将里程碑描述添加到结果中,而不将其添加为聚合函数的一部分(导致重复)或将其添加到导致多条记录和错误的子查询中
SELECT E.EID, E.[Client Name], E.[Audit Name], E.Status, MAX(M.ID) AS Milestone_ID, (
SELECT MAX ([Due Date]) FROM [Pilot Milestone] AS M2 WHERE M2.EID = M.EID) AS Due_Date, (
SELECT (Milestone) FROM [Pilot Milestone] AS M3 WHERE M3.EID = M.EID) AS Milestone
FROM [Pilot Milestone] AS M, [Potential Pilot Engagements] AS E
WHERE E.EID=M.EID
GROUP BY M.EID, E.EID, E.[Client Name], E.[Audit Name], E.Status, E.[Estimated Hours]