0

1 つの Access テーブルからデータを選択する単純なクエリがあります。レコード フィールドの 1 つは、submittalID フィールドを通じて、別のテーブル (submittalfwd という名前) の 4 つの日付に関連付けられています。大きなクエリによって返される各レコードに対して、昇順 (Date1、Date2、...) でクエリの一部として 4 つの日付を選択したいと考えています。

Access で LIMIT と OFFSET を使用できないことは理解しています。そのため、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 提出物 subfwddate
1 1 2012 年 9 月 12 日
2 1 2012 年 10 月 12 日
3 1 2012 年 12 月 11 日
4 1 2012 年 12 月 12 日
5 2 2012 年 12 月 13 日
6 2 2012 年 12 月 14 日
7 2 2012 年 12 月 15 日
8 2 2012 年 12 月 16 日
4

2 に答える 2

0

MS Access は Date2 と Date3 の WHERE 句の SUB.submittalID を理解できません (Date1 と Date4 は正しく機能します)。これは、date2 と date3 のサブクエリでは sub が範囲外であるためです。

次のようなものを試してください:

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 つの永続的なクエリを作成し、それらをこのメインの日付に結合することをお勧めします。理解しやすく、デバッグしやすい。

于 2012-12-12T21:15:48.513 に答える
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

?

于 2012-12-13T03:17:21.177 に答える