0

我试图让 PHP 脚本基于我们的支持系统使用的 API 工作,但我对 MySQL 的熟练程度不足以解决这个问题。

我需要做的是整理并找到所有“action”值为“New Support Ticket Opened”的条目,取“tid”并找到对应的条目具有“XXX 做出的 New Ticket Response”的动作其中 XXX 是“用户”以外的任何内容。我遇到的问题是实际上可能有多个条目与该描述匹配,但我只想找到第一个。

这个想法是我想显示一个图表,总结我们最初响应支持票所需的平均时间。

在此处输入图像描述

这是SQL的开始......

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
GROUP BY Tid

任何帮助都会很棒!谢谢你。

4

3 回答 3

0

您必须使用 LIMIT 子句:

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
AND b2.action != 'New Ticket Response made by User'
GROUP BY Tid
LIMIT 1
于 2011-06-27T12:58:16.977 回答
0

获取“tid”并找到具有“XXX 做出的新工单响应”操作的相应条目,其中 XXX 是除“用户”之外的任何内容

简单:

SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 INNER join billing b2 
  ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
AND b2.action <> 'New Ticket Response made by User'
GROUP BY Tid

如果你想找到实际的用户......

SELECT SUBSTR(b2.action, LENGTH('New Ticket Response made by ')) AS user,
  b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
....

(由于 LENGTH('New Ticket Response made by ') 是常数,用文字整数替换它会获得更好的性能)

于 2011-06-27T13:12:58.287 回答
0
SELECT b1.tid AS Tid, MIN(DATEDIFF(b2.date,b1.date)) AS ResponseTime
FROM billing b1 inner join billing b2 
ON b1.tid = b2.tid
WHERE b1.action='New Support Ticket Opened'
AND b2.action LIKE 'New Ticket Response made by%'
AND b2.action != 'New Ticket Response made by User' //to filter "New Ticket Response made by User"
GROUP BY Tid
LIMIT 1
于 2011-06-27T13:00:39.403 回答