2012-04-18 66 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