2012-04-18 71 views
0

我有2個以下表格:在SQL中創建查詢需要一些幫助?

Ticket(ID, Problem, Status,Priority, LoggedTime,CustomerID*, ProductID*); 
TicketUpdate(ID,Message, UpdateTime,TickedID*,StaffID*); 

這裏要回答一個問題:

關閉已經沒有更新了至少24小時,所有的支持票。這將是至少收到一次工作人員更新的記錄,並且至少24小時內沒有客戶(或工作人員)的進一步更新。

我的查詢是:

UPDATE Ticket SET Status = 'closed' FROM TicketUpdate 
WHERE(LoggedTime - MAX(UpdateTime))> 24 
    AND Ticket.ID = TicketUpdate.TicketID; 

當我在MySQL運行此查詢它說,「<」不存在。

你能告訴我是我的查詢權限,用於計算至少24小時未更新的記錄,如果它是正確的,我應該怎麼做而不是使用「<」?

+0

什麼數據類型是UpdateTime列?它是日期時間還是時間戳? – Tim 2012-04-18 10:23:09

+0

這是一個時間戳 – BlackOctober 2012-04-18 10:26:23

+0

您以前的問題的可能重複http://stackoverflow.com/questions/10195759/need-some-help-in-creating-a-query-in-sql和http://stackoverflow.com/問題/ 10192521 /需要一些幫助在創建一個查詢在SQL – halfer 2012-04-18 10:56:53

回答

0

...那收到了工作人員至少一個更新和 沒有進一步的更新,從客戶記錄(或工作人員)至少24小時 小時。

因此,有效的是,最後一次更新必須由工作人員完成並且超過24小時。這涵蓋了這一切。

(順便說一句,你有一個錯字:TickedID - >我用ticketid這裏。)

UPDATE ticket t 
SET status = 'closed' 
FROM (
    SELECT DISTINCT ON (1) 
      ticketid 
      ,first_value(updatetime) OVER w AS last_up 
      ,first_value(staffid) OVER w AS staffid 
    FROM ticketupdate 
    -- you could join back to ticket here and eliminate 'closed' ids right away 
    WINDOW w AS (PARTITION BY ticketid ORDER BY updateTime DESC) 
    ) tu 
WHERE tu.ticketid = t.id 
AND tu.last_up < (now()::timestamp - interval '24 hours') 
AND tu.staffid > 1 -- whatever signifies "update from a staff member" 
AND t.status IS DISTINCT FROM 'closed'; -- to avoid pointless updates 

注意,PostgreSQL的褶皺identifiers to lower case如果沒有雙引號。我建議遠離混合大小寫標識符開始。

+0

這是一個專業的答覆!!!這工作Erwin!非常感謝!;-) – BlackOctober 2012-04-18 14:31:43

0

如果你是PostgreSQL的工作那麼這應該工作

UPDATE Ticket SET Status = 'closed' FROM TicketUpdate 
WHERE abs(extract(epoch from LoggedTime - MAX(UpdateTime))) >24 
    AND Ticket.ID = TicketUpdate.TicketID; 
+0

我無法使用DATEDIFF,因爲我沒有列天。UpdateTime的數據類型是時間戳 – BlackOctober 2012-04-18 10:35:16

+0

@BlackOctober請參閱編輯 – Marshal 2012-04-18 11:10:36

+0

不能使用UPDATE中的聚合函數 LINE 2:WHERE abs(extract(from elog from LoggedTime - MAX(更新時間))) – BlackOctober 2012-04-18 12:37:11