2013-06-26 2 views
0

저는이 웹 사이트와 다른 많은 웹 사이트를 탐색하는 데 많은 시간을 보냈으며 아직 내 문제에 대한 해결책을 찾지 못했습니다. 여러 행이 집계 함수

나는 현재 다음 열을 끌어 MS 액세스에서 쿼리를 실행하려고 :

문제는 내가 가장 최근 이정표로 이정표가 필요하다. 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에는 여러 개의 마일스톤이 있으므로 기한으로 수행 한 것과 같은 방식으로 내 쿼리에 마일스톤 설명을 입력하면 비슷한 문제가 발생합니다.

도움을 주시면 대단히 감사하겠습니다.

감사 REVISED

다음 쿼리는 그냥 MS Access에서 테스트 나를 어떤 중복없이 내 due_dates에 대한 결과가 경우 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] 

또한 I는 집합 함수 (중복을 초래) 또는 하나 개 이상의 레코드를 초래 서브 쿼리에 추가의 일부를 첨가하거나하지 않고 그 결과로 마일스톤 정보를 추가하는 방법이 확실하고 당신이 조건을 추가하지 않으면 오류가

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] 
+1

에 대한 가장 최근의 기한과 함께 가장 최근의 Milestone_IDs의 목록을 제공합니다 '파일럿 마일스톤'에 대한 'D'참조로 인해 카티 션 곱을 얻었습니다. 이것은 GROUP BY로 인해 보이지 않지만 성능 시간에 비용이 들게됩니다 (특히 참조를 사용하지 않는 경우). 따라서 항상 명시 적으로 조인을 한정하고 암시 적 (쉼표로 구분 된 'FROM' 절) 구문을 사용하지 않아야합니다. 소스 테이블/샘플 데이터 및 원하는 결과를 표시하면 사용중인 Access 버전과 마찬가지로 도움이됩니다. 또한 주어진 행에 대해 동일하면'M.EID'와'E.EID'를 모두 그룹화 할 필요가 없습니다. –

+0

고맙습니다. 필자 메모장의 잘못된 부분을 보면서 실수로 여기에 쿼리를 적어서 파일럿 마일스톤 AS 실수를 저지른 것입니다. 지금 Access (2007)에서 복사 중입니다. –

답변

0

이 쿼리는 당신이있어, 당신에게 각 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] 
+0

아니요. M.ID가 가장 최근의 마일스톤을 제공합니다. 문제는 M을 포함해야한다는 것입니다.내 쿼리의 중요 시점. 따라서 위에 나열된 첫 번째 쿼리는 마일스톤 ID를 통해 가장 최근의 마일스톤에 대한 참조를 정확하게 제공하지만, SELECT 문에 마일스톤을 추가하면 각 EID에 대한 모든 이정표를 가져오고 가장 최근의 쿼리 만 필요합니다. –

+0

@Ianclark 귀하의 의견에 따라 답변을 편집했습니다. 다시 테스트하십시오. – DaVinci007

+0

고마워요! 나는 어떤 중복없이 만기 날짜를 끌어 내기 위해 그 질문을 쓸 수 있었다. 그러나 현재의 마일스톤이 늦은 due_date를 갖는다면 늦은 부정확 한 날짜를 잡아 당기는 문제가 하나 있습니다. 당신은 우연히이 문제를 해결하고 마일스톤 설명을 끌어낼 수있는 방법을 알고 있습니까? 나는 원래의 질문을 개정했다. 다시 한 번 감사드립니다! –