使用 PHP/MySQL 的平均响应时间


Average Response times using PHP/MySQL

我在MySQL数据库中有2个表。 一个叫tickets,另一个叫ticket_updates

票证有以下列:

  1. 序列
  2. 票号
  3. 日期时间

和ticket_updates

  1. 序列
  2. ticket_seq
  3. 日期时间
  4. 开始时间
  5. 结束时间

ticket_updates表中的ticket_seq列与tickets表中的ticketnumber列链接。ticket_updates中可能有多行链接到tickets表中的一行。

我想显示回复工单需要多长时间的平均响应时间。 两个表中的datetime列是添加/插入行时的完整时间戳(Y-m-d H:i:s)

如何显示平均响应时间,例如上周?

从你的聊天机智安迪琼斯,我知道你把工单的响应时间定义为tickets.datetime到该工单的第一ticket_updates.datetime之间经过的时间。在这种情况下,以下查询返回过去 7 天内添加的票证的平均响应时间(以秒为单位(。

SELECT avg(response_seconds)
  FROM (
     SELECT time_to_sec(timediff(min(u.datetime), t.datetime)) AS response_seconds
       FROM tickets t
       JOIN ticket_updates u
         ON t.ticketnumber = u.ticket_seq
      WHERE t.datetime > now() - INTERVAL 7 day
      GROUP BY t.ticketnumber ) AS r

我已经组装了一个完整的示例。我对您的数据进行了一些假设 - 如果列的类型错误,请适当更改。我还将返回以秒为单位的平均更新时间。

CREATE TABLE tickets (
  sequence int(10) not null auto_increment primary key,
  ticket_number int(10) not null default 0,
  date_added timestamp,
  index ticket_number_index (ticket_number)
  );
INSERT INTO tickets (ticket_number, date_added) VALUES
  (1, '2013-12-01 01:00:00'),
  (2, '2013-12-15 02:00:00'),
  (3, '2013-12-10 03:00:00'),
  (4, '2013-12-13 04:00:00'),
  (5, '2013-12-17 05:00:00');

CREATE TABLE ticket_updates (
  sequence int(10) not null auto_increment primary key,
  ticket_number int(10) not null default 0,
  date_added timestamp,
  starttime datetime,
  endtime datetime,
  index ticket_number_index (ticket_number)
  );
INSERT INTO ticket_updates (ticket_number, starttime, endtime, date_added) VALUES
  (1, '2013-12-01 01:01:00', '2013-12-01 01:02:00', '2013-12-01 01:02:00'),
  (1, '2013-12-01 01:01:00', '2013-12-01 01:02:00', '2013-12-01 01:02:00'),
  (2, '2013-12-15 02:01:00', '2013-12-15 02:02:00', '2013-12-15 02:02:00'),
  (2, '2013-12-15 02:01:00', '2013-12-15 02:02:00', '2013-12-15 02:02:00'),
  (2, '2013-12-15 02:01:00', '2013-12-15 02:02:00', '2013-12-15 02:02:00'),
  (2, '2013-12-15 02:02:00', '2013-12-15 02:02:50', '2013-12-15 02:02:50'),
  (4, '2013-12-13 04:01:00', '2013-12-13 04:02:00', '2013-12-13 04:02:00'),
  (4, '2013-12-13 04:01:00', '2013-12-13 04:05:30', '2013-12-13 04:05:30'),
  (5, '2013-12-17 05:01:00', '2013-12-17 05:03:00', '2013-12-17 05:03:00');

然后,您可以运行此查询...

SELECT SUM(TO_SECONDS(ticket_updates.date_added) - TO_SECONDS(tickets.date_added)) / count(*) as update_time
FROM tickets, ticket_updates
WHERE tickets.ticket_number = ticket_updates.ticket_number AND
  ticket_updates.date_added > now() - INTERVAL 1 WEEK

不确定这是否正是您正在寻找的 - 但这(和小提琴(可能有助于您更接近答案。

见小提琴:http://sqlfiddle.com/#!2/4c0acc/1

平均值是所有值的总和(在您的情况下,您必须将日期时间转换为 UNIX 时间戳(,然后将此总和除以总数。转换可以通过发出命令通过MySQL完成,例如

SELECT unix_timestamp(str_to_date('30/05/2011','%d/%m/%Y'));

或在 PHP 中显示结果时。这取决于项目的逻辑和结构。