我在MySQL数据库中有2个表。 一个叫tickets
,另一个叫ticket_updates
票证有以下列:
- 序列
- 票号
- 日期时间
和ticket_updates
- 序列
- ticket_seq
- 日期时间
- 开始时间
- 结束时间
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 中显示结果时。这取决于项目的逻辑和结构。