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

时间:2013-12-05 08:58:32

标签: php mysql

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

票证包含以下列:

  1. 序列
  2. ticketnumber
  3. 日期时间
  4. 和ticket_updates

    1. 序列
    2. ticket_seq
    3. 日期时间
    4. 开始时间
    5. 结束时间
    6. ticket_seq表中的ticket_updates列与ticketnumber表中的tickets列相关联。 ticket_updates中可能有多行链接到tickets表中的一行。

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

      我怎样才能显示上周的平均响应时间?

3 个答案:

答案 0 :(得分:2)

通过聊天智能Andy Jones我了解您将故障单的响应时间定义为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

答案 1 :(得分:1)

我已经完成了一个完整的例子。我假设了一些关于您的数据的事情 - 如果列有错误的类型,请适当更改。我还将以秒为单位返回平均更新时间。

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

答案 2 :(得分:0)

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

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

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