使用PHP / MySQL的平均响应时间
我有一个MySQL数据库中的2个表。 一个叫tickets
,另一个是ticket_updates
门票有以下几列:
和ticket_updates
在ticket_seq
列ticket_updates
与表链接ticketnumber
列tickets
表。 ticket_updates
可能有多行链接到tickets
表中的一行。
我想要显示平均响应时间,以便回复票证需要多长时间。 两个表中的datetime
列都是该行添加/插入时的完整时间戳(Ymd 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。 这取决于你的项目的逻辑和结构。
链接地址: http://www.djcxy.com/p/17705.html