Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql运行时间总计取决于票务状态_Mysql_Sql - Fatal编程技术网

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

我对SQL相当陌生,很难找到合适的命令来完成我要完成的任务

我们有一个票务系统,允许我们把票挂起。我正试图制作一份报告,只显示票证处于非保留状态的时间

我正在MySQL工作台中运行查询

以下是我收集实现目标所需信息的查询:

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
应该正好做到这一点。