0

我有 2 个下表:

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

4

2 回答 2

0

If you are working with postgreSQL then this should work

UPDATE Ticket SET Status = 'closed' FROM TicketUpdate 
WHERE abs(extract(epoch from LoggedTime - MAX(UpdateTime))) >24
     AND Ticket.ID = TicketUpdate.TicketID;
于 2012-04-18T10:31:33.527 回答
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会将标识符折叠为小写。我建议一开始就远离混合大小写标识符。

于 2012-04-18T13:35:19.860 回答