访问 SQL 子查询以从上一年的记录中查找值 (Max/Top 减 1)

访问 SQL 子查询以从上一年的记录中查找值 (Max/Top 减 1)

我能找到的所有建议似乎都没有解决这个问题(我也试图避免在桌子本身):

桌子:桌子有客户记录,包括场,一个约会日期领域和客户名称字段(该字段在所有年份中对于每个客户都具有相同的值)。(表中每个记录的客户 ID 预计是随机的。)

在 MS Access 查询中,显示了今年的客户样本(由客户名称并受其他一些因素的影响),还需要显示约会日期与上一年相比(最高减 1) 同一客户的记录。

如下的子查询尝试不起作用:

去年预约日期:

(SELECT AppointmentDate FROM (SELECT (AppointmentDate) FROM Table ORDER BY Year DESC LIMIT 2) ORDER BY AppointmentDate ASC LIMIT 1)

网上也没有建议顶部尝试显示出了预期的结果。

(我意识到最大限度不受 MS Access 的支持。

也许我遗漏了有关 Access 的 SQL 子查询语法(通过“缩放”对话框)。

答案1

以下解决:

SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client]) AND ((Year=(SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName=[Client]))))))));

现在的挑战是将其与最近一年的表中的客户字段(如 AppointmentDate)合并 - 并为每个客户显示此字段。有没有不使用 UNION 的方法可以做到这一点?

答案2

好吧,经过多次尝试将 SQL 输入 Access 之后,仍然缺少一些重要的东西:

以下是目前的部分内容(好吧,尽管文档中说 MAX 不能正常工作,但 MAX 似乎可以正常工作):

SELECT MAX(Table.Year) 
FROM Table
WHERE Table.Year<(SELECT MAX(Table.Year) FROM Table)

以上正确选择了前一年(通常对于表格)。

特定客户的前一年的数据可以这样分离:

SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))));

其中“客户端”目前只能手动输入。

现在的挑战是通过通用的 ClientName 从上一年的记录中选择 AppointmentDate 值(以及每个 ClientName 的上述 PreviousYear 值 - 每个客户的 PreviousYear 值都会不同) - 这是我似乎遗漏了一些重要的东西的地方:

SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client])) AND ((Table.Year)=(SELECT MAX(Table.Year) AS LastDueDate FROM Table WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))))));

不确定缺少了什么,已尝试:FROM Table t ...

任何见解都将不胜感激 - 谢谢!

相关内容