【问题标题】:Average number of days using MySQL平均使用 MySQL 的天数
【发布时间】:2012-07-20 03:27:16
【问题描述】:

我试图获取用户关闭工单到打开“下一个”工单之间的平均天数。

下面是我的 MySQL 表示例。您会注意到 Mike 创建了 3 张工单,间隔 9 天(7 月 1 日-7 月 10 日)和 5 天(7 月 10 日-7 月 15 日),平均为 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

【问题讨论】:

    标签: mysql average


    【解决方案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 Demo

    【讨论】:

    • 谢谢,这正是我想要的。也感谢 SQLFiddle 演示链接,如果我以后有问题,我会使用它。
    【解决方案2】:
    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;
    

    请注意,此查询不使用相关子查询(由于编码方式依赖于行中的值而对每一行执行的查询),因此它应该执行得相当好。

    【讨论】:

      【解决方案3】:

      试试这个:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 2021-04-19
        • 2012-06-15
        相关资源
        最近更新 更多