MySql运行时间总计取决于票务状态
我对SQL相当陌生,很难找到合适的命令来完成我要完成的任务 我们有一个票务系统,允许我们把票挂起。我正试图制作一份报告,只显示票证处于非保留状态的时间 我正在MySQL工作台中运行查询 以下是我收集实现目标所需信息的查询:MySql运行时间总计取决于票务状态,mysql,sql,Mysql,Sql,我对SQL相当陌生,很难找到合适的命令来完成我要完成的任务 我们有一个票务系统,允许我们把票挂起。我正试图制作一份报告,只显示票证处于非保留状态的时间 我正在MySQL工作台中运行查询 以下是我收集实现目标所需信息的查询: select ID, HD_TICKET_ID, TIMESTAMP, case when DESCRIPTION LIKE '%opened" to "hold%' then 'hold' else 'active' end as state, DESCRIPTION
select ID, HD_TICKET_ID, TIMESTAMP,
case when DESCRIPTION LIKE '%opened" to "hold%' then 'hold' else 'active' end as state,
DESCRIPTION
from H
D_TICKET_CHANGE
where HD_TICKET_ID = 7715
order by TIMESTAMP
以下是我的结果:
ID HD_TICKET_ID TIMESTAMP state DESCRIPTION
25040 7715 "2014-08-06 16:39:29" active "Ticket Created
25042 7715 "2014-08-06 17:13:15" active "Changed ticket Status from ""New"" to ""Opened"".
25078 7715 "2014-08-07 10:38:28" hold "Changed ticket Status from ""Opened"" to ""Hold"".
25081 7715 "2014-08-07 10:54:55" active "Changed assest name"
25201 7715 "2014-08-11 08:24:56" active "Changed ticket Title. Changed ticket Status from ""Hold"" to ""Opened"".
25202 7715 "2014-08-11 08:25:08" hold "Changed ticket Status from ""Opened"" to ""Hold"".
25341 7715 "2014-08-13 10:56:00" active "Changed ticket Status from ""Hold"" to ""Opened"".
25373 7715 "2014-08-13 13:41:01" hold "Changed ticket Status from ""Opened"" to ""Hold"".
25551 7715 "2014-08-15 13:54:21" active "Added resolution text. Changed ticket Status from""Hold"" to ""Closed"".
在这一点上,我被卡住了。如何将时间从1添加到3,因为票证处于活动状态且需要报告该时间,而将时间从3减去4,因为票证处于保留状态,并根据活动与保留继续此加减操作,直到这些结果的末尾?您需要获得下一个时间戳值。然后,您可以使用聚合执行您想要的操作。我喜欢在MySQL中使用相关子查询:
select ID, HD_TICKET_ID, TIMESTAMP,
(case when DESCRIPTION LIKE '%opened" to "hold%' then 'hold'
else 'active'
end) as state, DESCRIPTION,
(select tc2.timestamp
from HD_TICKET_CHANGE tc2
where tc2.timestamp > tc.timestamp
order by tc2.timestamp
limit 1
) as next_timestamp
from HD_TICKET_CHANGE tc
where HD_TICKET_ID = 7715
order by TIMESTAMP;
然后,您可以将结果相加为:
select sum((case when state = 'active' then 1 else -1 end) *
timestampdiff(second, next_timestamp, timestamp)
) as TimeInSeconds
from (select ID, HD_TICKET_ID, TIMESTAMP,
(case when DESCRIPTION LIKE '%opened" to "hold%' then 'hold'
else 'active'
end) as state, DESCRIPTION,
(select tc2.timestamp
from HD_TICKET_CHANGE tc2
where tc2.timestamp > tc.timestamp and tc2.HD_TICKET_ID = tc.HD_TICKET_ID
order by tc2.timestamp
limit 1
) as next_timestamp
from HD_TICKET_CHANGE tc
where HD_TICKET_ID = 7715
) t;
这忽略了最后的时间戳,因为没有“下一个”值,并且您的问题没有指定在这种情况下要执行的操作。您想添加什么?分钟天(含日分数)?分钟。只是想找一些metrix交给首席信息官关于平均票证关闭时间的信息,而没有等待时间。这是基于ID拉取下一个时间戳。第一个ID 25040用于此票证TID,但未列出的下一个时间戳25041用于另一个票证TID。如何将选定的下一个tampstamp限制为仅用于相同的HD_票证ID?@Jay。条件
tc2.HD\u TICKET\u ID=tc.HD\u TICKET\u ID
应该正好做到这一点。