0

我花了一天的大部分时间浏览这个网站和许多其他网站,但还没有找到解决我问题的方法。

我目前正在尝试在 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]
4

1 回答 1

0

此查询将为您提供最近的 Milestone_ID 列表以及每个 Milestone_ID 的最近到期日期

SELECT 
    E.[EID], E.[CN], E.[AN], M.[Milestone], E.[Status], MAX(M.[ID]) AS Milestone_ID, (
        SELECT MAX([Due Date]) FROM [Pilot Milestone] AS M2 WHERE M2.[ID]=MAX(M.[ID]) AND M2.[EID]=M.[EID]
        ) as Due_Date
FROM 
    [Pilot Milestone] AS M
    INNER JOIN [PP Engagements] AS E ON E.[EID]=M.[EID]
GROUP BY E.[EID], E.[CN], E.[AN], M.[Milestone], E.[Status]
于 2013-06-26T20:23:29.247 回答