2013-03-17 124 views
0

我試圖寫它會告訴我誰沒有皮卡超過2個月 我已經有更新的程序爲它的客戶的陳述和它的作品,因爲它必須是用max函數select語句

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())任何想法如何解決這個問題?

+2

使用'HAVING',而不是'WHERE'。 http://stackoverflow.com/q/287474/139010和http://stackoverflow.com/q/6319183/139010 – 2013-03-17 23:52:44

回答

1

使用具有代替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()) 
+0

我正在嘗試這種方法,但它拋出錯誤'消息156,級別15,狀態1,行8 關鍵字'group''附近的語法不正確.' – Andrey 2013-03-17 23:59:30

+0

噢耶 - 有追隨者。我會編輯 – 2013-03-18 00:00:53

+0

:)我在編輯你之前發佈:) thanx! – Andrey 2013-03-18 00:02:24