在SQL中创建查询需要一些帮助吗?

时间:2012-04-18 10:18:22

标签: sql postgresql

我有以下两张表:

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小时内未更新的记录,如果它是正确的,我应该使用什么代替“<”?

2 个答案:

答案 0 :(得分:0)

如果您正在使用postgreSQL,那么这应该可以正常工作

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

答案 1 :(得分: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。我建议首先远离混合大小写标识符。