我在一个MySQL数据库中有两个表。一个叫tickets,另一个叫ticket_updates
票列如下:
和ticket_updates
ticket_seq表中的ticket_updates列与tickets表中的ticketnumber列链接。ticket_updates中可能有多个行链接到tickets表中的一行。
我想显示一个平均响应时间多长时间的票,以得到答复。两个表中的datetime列都是添加/插入(Y-m-d H:i:s)时的完整时间戳。
我怎样才能显示平均响应时间,比如说上周?
发布于 2013-12-19 08:00:47
从Andy的聊天中我了解到,您将票证的响应时间定义为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发布于 2013-12-18 23:52:44
我已经收集了一个完整的例子。我假设了一些关于您的数据的事情--如果列类型错误,则适当地进行更改。我还将以秒为单位返回平均更新时间。
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不确定这是否正是你想要的--但是这个(和小提琴)可能会帮助你更接近答案。
发布于 2013-12-05 09:04:13
平均值是所有值的总和(在您的示例中,您必须将datetime转换为UNIX时间戳),然后将该总和除以总数。转换可以通过MySQL来完成,例如,发出命令
SELECT unix_timestamp(str_to_date('30/05/2011','%d/%m/%Y'));或者在PHP中显示结果。这取决于项目的逻辑和结构。
https://stackoverflow.com/questions/20395511
复制相似问题