0

我正在尝试写一份声明,该声明将向我展示超过 2 个月没有接机的客户,我已经有更新程序并且它必须按照

update Clients
set StatusID=4
from (SELECT P.ClientID, MAX(p.PickupDate) MaxPickupDate
      FROM Pickup P
      group by P.Clientid) P
     join Clients C on P.ClientID= C.ClientID
where   C.StatusID in (1, 2)and C.WIC=0
      AND P.MaxPickupDate<DATEADD(month,-2,GETDATE());

我还有其他选择

select P.ClientID
   ,LastName+' '+FirstName as Name 
   ,Address
   ,max(p.PickupDate)
from Pickup P
join Clients C on P.ClientID= C.ClientID
where max(p.PickupDate)<DATEADD(month,-2,GETDATE())
group by p.clientid, lastname + ' ' + firstname,address

它应该只向我显示超过 2 个月没有提货的客户,但它给我带来了错误

聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。

看起来它不喜欢这条线 where max(p.PickupDate)<DATEADD(month,-2,GETDATE())任何想法如何解决这个问题?

4

1 回答 1

1

使用 HAVING 而不是 WHERE 因为需要在聚合完成之后而不是之前应用逻辑:

select P.ClientID
   ,LastName+' '+FirstName as Name 
   ,Address
   ,max(p.PickupDate)
from Pickup P
join Clients C on P.ClientID= C.ClientID
group by p.clientid, lastname + ' ' + firstname,address
HAVING max(p.PickupDate)<DATEADD(month,-2,GETDATE())
于 2013-03-17T23:57:28.447 回答