在mysql中筛选重新打开的票据

在mysql中筛选重新打开的票据,mysql,Mysql,我可能在这里遇到了一些愚蠢的事情,但我正在尝试获取db中处于打开/挂起状态的票证,但我无法找到一个解决方案,包括在某个点关闭然后重新打开的票证。 在这里的表格中: 票10727将不符合要求,因为如果我这样过滤,它将显示为关闭: ticket_id NOT in (select zts.ticket_id from zendesk_ticket_status zts join zendesk_ticket zt on zts.ticket_id = zt.ticket_id where zt

我可能在这里遇到了一些愚蠢的事情,但我正在尝试获取db中处于打开/挂起状态的票证,但我无法找到一个解决方案,包括在某个点关闭然后重新打开的票证。 在这里的表格中:

票10727将不符合要求,因为如果我这样过滤,它将显示为关闭:

ticket_id NOT in 
(select zts.ticket_id
from zendesk_ticket_status zts
join zendesk_ticket zt on zts.ticket_id = zt.ticket_id 
where zts.status IN ('closed', 'solved')) 
我怎样才能确保这张票包括在内?
基本上添加了一些例外情况,这样我也可以在状态为“打开”、“挂起”和状态为“已解决”时更新\u at>updated\u at获取票证。

可能有更有效的方法,但您可以这样做:

SELECT DISTINCT zts.ticket_id
FROM zendesk_ticket zts
LEFT JOIN (
  SELECT ticket_id, MAX(updated_at) AS close_date 
  FROM zendesk_ticket 
  WHERE status IN ('closed', 'solved')
  GROUP BY ticket_id
) AS closed_tickets ON zts.ticket_id = closed_tickets.ticket_id
WHERE closed_tickets.ticket_id IS NULL
OR zts.updated_at > closed_tickets.close_date

closed\u tickets
子查询应为每个ticket获取其
关闭的最长日期或
已解决的最长日期,然后将结果
左连接到主表,以便只获取子查询中没有条目的ticket,或者,如果有更新的更新

您是否可以查看每张机票的最新状态

SELECT zt.ticket_id 
FROM zendesk_ticket zt
JOIN zendesk_ticket_status zts on zts.ticket_id = zt.ticket_id 
WHERE zts.id = (
   SELECT TOP 1 zts2.id
   FROM zendesk_ticket_status zts2
   WHERE zts2.ticket_id  = zt.ticket_id 
   ORDER BY zts2.updated_at DESC
)
AND zts.status IN ('open', 'pending', 'closed', 'solved', ...)

只需检查最近的状态是否为“打开”或“挂起”。但是否要在结果集中显示整个跟踪?或者仅从最近的已关闭、已解决(如果有)或从新解决(如果没有),请参阅: