我在MySQL数据库中有2个表。一个名为tickets
,另一个名为ticket_updates
票证包含以下列:
和ticket_updates
ticket_seq
表中的ticket_updates
列与ticketnumber
表中的tickets
列相关联。 ticket_updates
中可能有多行链接到tickets
表中的一行。
我想显示回复门票需要多长时间的平均响应时间。两个表中的datetime
列是添加/插入行的完整时间戳(Y-m-d H:i:s)
我怎样才能显示上周的平均响应时间?
答案 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
不确定这是否正是您正在寻找的 - 但是这(以及小提琴)可能会帮助您更接近答案。
答案 2 :(得分:0)
平均值是所有值的总和(在您的情况下,您必须将datetime转换为UNIX时间戳),然后将此总和除以总计数。 转换可以通过发出命令通过MySQL完成,例如
SELECT unix_timestamp(str_to_date('30/05/2011','%d/%m/%Y'));
或在显示结果时使用PHP。这取决于项目的逻辑和结构。