0

我有一个从一个 Access 表中选择数据的简单查询。其中一个记录字段通过 submittalID 字段与另一个表(名为 submittalfwd)中的四个日期相关联。我想为较大查询返回的每条记录选择四个日期作为查询的一部分,按升序排列(Date1、Date2、...)。

我知道 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 提交 subfwddate
1 1 2012 年 12 月 9 日
2 1 2012 年 12 月 10 日
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 回答