我有以下两张表:
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 :(得分: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。我建议首先远离混合大小写标识符。