2012-12-12 197 views
0

我有一個簡單的查詢是從一個Access表中選擇數據。其中一個記錄字段通過submittalID字段與另一個表(名爲submittalfwd)中的四個日期相關聯。我想按升序(Date1,Date2,...)選擇四個日期作爲查詢的一部分,以查詢較大查詢返回的每條記錄。MS Access子查詢

我知道LIMIT和OFFSET不能與Access一起使用,所以我不確定如何以最有效的方式按升序選擇四條記錄。

以下查詢幾乎可行 - 但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()函數替換子查詢來簡化該操作?或者最終,艾倫布朗的Elookup(),可以在這裏找到:http://allenbrowne.com/ser-42.html –

+0

對不起,複雜性;我把它分解成一個有問題的部分。 – Seth

+0

我不熟悉DFirst或DMax,但我會研究它們。 – Seth

回答

0

MS Access無法理解SUB.submittalID的日期2和DATE3(日期1和Date4正常工作)在WHERE子句中,因爲個子出來的當你在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分鐘日期2次持久的查詢,並與該主一個加入他們的行列。更容易理解和調試。

+0

謝謝,貝思,反饋。我不是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