0

总的来说,我要做的只是显示最近30 天内出现服务的最新客户记录,并且仅显示根据当前日期的最新服务记录。

有两个表,它们以一对多的关系构造。

第一个表是表:“客户”

|---------------------------------------------------|
| 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 天内进来时,他/她之前的条目仍在系统中,需要跟进。(我不想只显示最近的旧服务记录,如果它超过 30 天)

UI 中的上述查询将处理 30 天或更早的部分,但是我需要清理列表中旧客户服务条目的系统。

尝试:

所以我想在加载用户界面时执行更新查询,这将清除员工所有旧服务条目的列表。

我只希望查询将每个客户的服务表中的真/假字段(followup30)的所有条目设置为真,但最近日期除外。

这是我到目前为止所拥有的,但我认为它不会单独对待每个客户,并且可能存在一些语法问题。

UPDATE tblservice
SET followup30='Yes'
WHERE (SELECT Timing FROM tblservice WHERE Timing <> (SELECT MAX(Timing) 
FROM tblservice));

任何帮助将不胜感激,谢谢

4

2 回答 2

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 天的逻辑。)

于 2012-06-04T02:33:26.697 回答
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 字段,您将必须相应地调整更新查询。

于 2012-06-04T04:30:55.057 回答