我已经花了很大一部分时间浏览本网站和其他许多人,并且还没有找到解决我的问题的方法。聚合函数中的多行
我目前正在运行的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都有多个里程碑,因此如果我在查询中输入里程碑说明的方式与我的截止日期相同,我会遇到类似的问题。
任何帮助,非常感谢。
感谢
修订
下面的查询给我结果我due_dates没有任何重复,我只是在MS Access测试2007年但是,查询无论拉最近的日期,如果它是从最近的里程碑。
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]
最近的截止日期以及最近Milestone_IDs的名单,除非你添加一个条件,你由于'D'引用'Pilot Milestone',因此获得笛卡尔产品。由于“GROUP BY”的原因,这是不可见的,但是会在性能上花费你的时间(尤其是当你没有使用该参考时)。这就是为什么你应该总是明确限定你的连接,而不是使用隐式(以逗号分隔的''''''子句)语法。显示源表格/样本数据和期望的结果可能会帮助我们帮助您,您使用的Access版本也会有所帮助。你也不应该由'M.EID'和'E.EID'组合,因为它们对于给定的行是相同的。 –
谢谢,我无意中在这里写下了查询,同时查看了记事本的错误部分,导致了Pilot Milestone AS D错误。我只是从Access(2007)现在复制 –