总体而言,我要做的只是显示过去30天内 的最新客户记录&仅根据当前日期显示最新的服务记录。
有两张桌子和一张桌子。它们以一对多的关系构建。
第一个表是表:“customer”
|---------------------------------------------------|
| ID | FirstName | LastName | Male | Female | Phone |
|---------------------------------------------------|
35 John Mulling True False 905
84 Mike Stone True False 416
90 Cassie Daniels False True 315
第二个表是表:“tblservice”
|-------------------------------------------------------------------------|
| ServiceID | Followup30 | Timing | Service1 | Total | customerID |
|-------------------------------------------------------------------------|
1 Yes 01/02/2012 Serv-001 120.00 35
2 No 02/05/2012 Serv-003 500.00 84
3 No 03/25/2012 Serv-008 85.00 90
此列表在用户界面中通过以下查询进行过滤,该查询每周一次或每月一次由员工检查以跟进客户(一旦打电话给客户,员工设置'followup30'复选框'是'):
SELECT customer.FirstName, customer.LastName, customer.Male, customer.Female,
customer.Phone, tblservice.Followup30, tblservice.Timing, tblservice.Service1,
tblservice.Total
FROM customer
INNER JOIN tblservice
ON customer.ID=tblservice.customerID
WHERE (((tblservice.Followup30)=No)
AND ((tblservice.Timing)<=DateAdd("d",-30,Date()))
AND ((customer.Phone) Is Not Null))
ORDER BY tblservice.Timing;
然而,问题似乎是当客户在20天内说出来时,他/她之前的条目仍然在需要跟进的系统中。 (我不想要显示这个旧的服务记录只有最新的&amp;如果它超过30天)
UI中的上述查询将处理30天或更早的部分,但是我需要清理列表中旧客户服务条目的系统。
尝试:
所以我想在加载用户界面时执行更新查询,这将清除员工的所有旧服务条目的列表。
我只是希望查询将每个客户的服务表中的真/假字段(followup30)的所有条目设置为真正除之外的最近日期。
这是我到目前为止所做的,但我认为它不会分别对待每个客户,并且可能存在一些语法问题。
UPDATE tblservice
SET followup30='Yes'
WHERE (SELECT Timing FROM tblservice WHERE Timing <> (SELECT MAX(Timing)
FROM tblservice));
非常感谢任何帮助,谢谢
答案 0 :(得分:0)
您可以使用相关子查询执行此操作:
UPDATE tblservice
SET followup30 = 'Yes'
FROM (select max(Timing) as maxTiming
from tblservice ts
where tblservice.CustomerId = ts.Customerid
) t
where tblservice.Timing = maxTiming
我认为这会抓住你想要的逻辑,只关注最新的记录。 (您可能需要修改它以放入30天的逻辑。)
答案 1 :(得分:0)
我确信您可以使用嵌入式SQL执行此操作,但是如果您创建一个名为LastService的查询,如下所示
SELECT tblService.CustomerId, Max(tblService.Timeing) AS MaxOfTimeing FROM tblService GROUP BY tblService.CustomerId;
然后您可以在更新查询中使用它,如下所示
UPDATE customer INNER JOIN LastService ON customer.CustomerId = LastService.CustomerId SET customer.Followup30 = iif(LastService.MaxOfTimeing<DateAdd("d",-30,Now()),'YES','NO')
假设Followup30是一个文本字段,如果是YES / NO字段,则必须相应地调整更新查询。