2012-12-12 5 views
0

하나의 Access 테이블에서 데이터를 선택하는 간단한 쿼리가 있습니다. 레코드 필드 중 하나는 submittalID 필드를 통해 다른 테이블 (submittalfwd)의 네 날짜와 상관됩니다. 큰 쿼리에서 반환 된 각 레코드에 대해 오름차순 (Date1, Date2, ...)으로 쿼리의 일부로 4 개의 날짜를 선택하고 싶습니다.MS Access SubQueries

나는 LIMIT 및 OFFSET을 Access에서 사용할 수 없다는 것을 알고 있으므로 4 개의 레코드를 오름차순으로 선택하는 것이 가장 효율적인 방법인지 확신하지 못합니다.

아래의 쿼리는 거의 작동하지만 MS Access는 WHERE 절에서 SUB.submittalID를 인식 할 수 없습니다.

도움을 주시면 감사하겠습니다. 감사합니다,

SELECT SUB.submittalID, 

(SELECT TOP 1 subq2.subfwddate FROM 
(SELECT TOP 2 subq2.subfwddate FROM submittalfwd AS subq2 
WHERE subq2.submittal = SUB.submittalID ORDER BY subq2.subfwddate ASC) 
ORDER BY subq2.subfwddate DESC) AS Date2 

FROM submittals AS SUB; 

샘플 데이터 - submittalfwd 테이블

 
subfwdID submittal subfwddate 
1 1 12/9/2012 
2 1 12/10/2012 
3 1 12/11/2012 
4 1 12/12/2012 
5 2 12/13/2012 
6 2 12/14/2012 
7 2 12/15/2012 
8 2 12/16/2012 
+1

DFirst() 또는 DMax() 함수로 하위 쿼리를 대체하여 단순화하려고 했습니까? 또는 결국, Allen Browne의 Elookup(), 여기에서 찾을 수 있습니다 : http://allenbrowne.com/ser-42.html –

+0

미안하지만 복잡합니다. 문제의 한 부분으로 잘라 냈습니다. – Seth

+0

DFirst 나 DMax에 익숙하지 않아요.하지만 제가 살펴 보겠습니다. – Seth

답변

0
서브가 부족하기 때문에 MS 액세스 DATE2와 Date3 (날짜 1과 Date4 제대로 작동)에 대한 WHERE 절에 SUB.submittalID를 이해할 수

date2 및 date3 하위 쿼리를 사용할 때 범위입니다. , 더 나은 내 의견

SELECT 
sub.submittalID, specdivision, specsection, submittalnumber, 
miscnumber, submittaltitle, subcontractor, action, comments, 
open, 

min_sfDate, 

(select submittal, subfwddate_min2 from 
    (SELECT TOP 1 submittal, subfwddate_min2 FROM 
     (SELECT TOP 2 submittal, subfwddate_min2 FROM submittalfwd ORDER BY subfwddate ASC) s2 
    ORDER BY submittal, subfwddate_min2 DESC) AS min_sfDate_2nd 
where sub.submittalid = submittal), 

(select submittal, subfwddate_min3 from 
    (SELECT TOP 1 submittal, subfwddate_min3 FROM 
     (SELECT TOP 3 submittal, subfwddate_min3 FROM submittalfwd ORDER BY subfwddate ASC) s3 
    ORDER BY submittal, subfwddate_min3 DESC) AS min_sfDate_3rd, 
where sub.submittalid = submittal), 

max_sfDate 

FROM submittals AS SUB inner join 
(select submittal, min(subfwddate) as min_sfDate, max(subfwddate) as max_sfDate 
from submittalfwd group by submittal) m on 
sub.submittalID = m.submittal 

또는, 당신의 2 층과 3 분의 날짜에 대한이 지속적으로 쿼리를 작성하고이 주 하나를 조인

것이 더 같은 것을보십시오. 더 쉽게 이해하고 디버깅 할 수 있습니다.

+0

감사합니다, Beth, 피드백에 대해서. 나는 SQL 전문가가 아니며 귀하의 질의는 제 지식을 조금 뛰어 넘습니다. 나는 당신의 답을 파싱하고 내가 일하도록 할 수 있는지 알아볼 것입니다. – Seth

+0

당신의 쿼리를 실행할 때 문법 오류가 발생하지만, 나는 그걸로 놀고, 내가 운이 있는지 볼 것이다. – Seth

0

나는 이것이 당신이 원하는 밤은 두려움, 그런데 왜 당신은 단지 비교적 간단 할 수 없다 :

SELECT s.SubmittalID [Submittal], sf.SubFwdDate [Forward Date] 
FROM submittals s LEFT JOIN submittalfwd sf ON s.SubmittalID = sf.SubmittalID 
ORDER BY 1, 2 

?