select语句具有max函数

时间:2013-03-17 23:47:33

标签: sql sql-server-2008 select max

我正在尝试撰写一份声明,告诉我那些未提取超过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子句中,除非它在a中   包含在HAVING子句或选择列表中的子查询以及列   被聚合是一个外部参考。

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

1 个答案:

答案 0 :(得分: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())