Reputation: 27
I'm trying to get the average number of days between when a user closes a ticket to when they open their "next" ticket.
A sample of my MySQL table is below. You will notice that Mike has created 3 tickets, 9 days apart (July1-July 10) and 5 days (July 10-July 15) apart, average is 7 days. I can't seem to figure out how to look for the last resolved date, anybody have any ideas? This is what I have so far:
SELECT
Name,
Created,
Resolved,
avg(datediff("Last Ticket Resolved", created) AS last_tket_open
FROM
MyTable
WHERE
Name='Mike'
Name Created Resolved
---- ------- --------
Mike July 1 July 1
Jill July 2 July 3
Mike July 10 July 10
Harry July 11 July 11
Mike July 15 July 15
Upvotes: 0
Views: 1552
Reputation: 847
Try this:
SELECT
t1.Name,
AVG( datediff( t2.Created, t1.Resolved )) AS avg_days_between_tickets
FROM
MyTable t1,
MyTable t2
WHERE
t2.Name = t1.Name
AND t2.Created = ( SELECT MIN( Created )
FROM MyTable
WHERE Name = t1.Name
AND Created > t1.Resolved )
GROUP BY
t1.Name
Upvotes: 0
Reputation: 23125
SELECT a.name,
AVG(DATEDIFF(a.resolved, b.created)) AS avgdays
FROM
(
SELECT name, resolved, @val1:=@val1+1 AS rn
FROM tbl
CROSS JOIN (SELECT @val1:=0) val1_init
WHERE name = 'Mike'
ORDER BY resolved
) a
INNER JOIN
(
SELECT created, @val2:=@val2+1 AS rn
FROM tbl
CROSS JOIN (SELECT @val2:=1) val2_init
WHERE name = 'Mike'
ORDER BY resolved
) b ON a.rn = b.rn
Upvotes: 1
Reputation: 425043
select
Name,
AVG( datediff( next_created, resolve )) AS avg_time
from (select
t1.Name,
t1.Created,
t1.Resolved,
min(t2.Created) as next_created
from mytable t1
join myTable t2 on t1.Name = t2.Name and t2.Created > t1.Resolved
group by 1,2,3) x
group by 1;
Note that this query does not use an correlated subqueries (queries that execute for every row due to the way they are coded to depend on a value in a row), so it should perform quite well.
Upvotes: 0