【发布时间】:2011-05-31 05:26:16
【问题描述】:
我是 Access 新手,正在使用 Access 2007。
我正在对包含访问研讨会的客户列表的数据库进行简单查询。
我想在客户上次访问后 3 个月内向他们发送服务提醒。我创建了一个查询,以便能够返回从当月起 3 个月访问过的客户列表。比如现在是五月,3个月前就是三月(包括五月)。
但是,3 个月前访问过的客户可能在 2 个月前再次访问过。例如,客户 A 在 3 月和 4 月到来。他的最后一次访问是在 4 月,因此,如果我要在 5 月运行查询,则不应出现在结果中,因为他的提醒应该只在 6 月发出。
我的查询已经解决了这个问题,但是速度很慢。它需要一些时间才能加载到 Access 中。任何帮助将不胜感激优化它。
这里唯一重要的字段是Invoice.DebCode,即数据库中的customersID。还有另外一张表DEBTOR,这是一张客户表以及他们的详细信息。
我使用了 INNER JOIN,因为我需要在结果中显示客户(债务人)地址和详细信息。
SELECT Invoice.InvNo, Invoice.InvDate, Invoice.DebCode, Debtor.DebName, Debtor.AddL1, Debtor.AddL2, Debtor.AddL3, Invoice.CarNo, Invoice.ChaNo, Invoice.ExcReason
FROM Debtor
JOIN Invoice ON Debtor.DebCode = Invoice.DebCode
WHERE Year(InvDate) = Year(Now())
AND Month(InvDate) = Month(Now()) - 2
AND Invoice.DebCode NOT IN (SELECT Invoice.DebCode
FROM Invoice
WHERE Year(InvDate) = Year(Now())
AND ( (Month(InvDate) = Month(Now()) -1)
OR (Month(InvDate) = Month(Now())) )
【问题讨论】:
-
据我了解,本月您想有一个客户查询提醒。所以我认为您可以首先检索每个客户的最后一次访问,也许使用'SELECT ... TOP ...'。然后将其作为子查询,查看每个客户的最后一次访问是否在最近 3 个月内。
标签: sql ms-access query-optimization