0

ユーザーがチケットを閉じてから「次の」チケットを開くまでの平均日数を取得しようとしています。

私の MySQL テーブルのサンプルを以下に示します。Mike が 9 日間隔 (7 月 1 日から 7 月 10 日) と 5 日間隔 (7 月 10 日から 7 月 15 日) の 3 つのチケットを作成したことがわかります。平均は 7 日です。最後に解決された日付を探す方法がわかりません。誰かアイデアはありますか? これは私がこれまでに持っているものです:

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
4

3 に答える 3

1
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

SQLFiddleデモ

于 2012-07-19T19:23:03.750 に答える
0

これを試して:

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
于 2012-07-19T18:53:00.133 に答える
0
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;

このクエリは、相関サブクエリ (行の値に依存するようにコード化されているため、すべての行に対して実行されるクエリ) を使用しないため、非常にうまく機能するはずです。

于 2012-07-19T19:14:05.047 に答える