我能找到的所有建议似乎都没有解决这个问题(我也试图避免在桌子本身):
桌子:桌子有客户记录,包括年场,一个约会日期领域和客户名称字段(该字段在所有年份中对于每个客户都具有相同的值)。(表中每个记录的客户 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 ...
任何见解都将不胜感激 - 谢谢!