【问题标题】:MySql average date differenceMySql 平均日期差
【发布时间】:2020-04-17 10:21:20
【问题描述】:

我有一个问题,我不知道是否有可能解决它。 也就是说,我有一个 MySQL 数据库,它有两列:id 和 date。 如何制定一个查询来计算所有日期的平均差异? 例如,1 到 2 之间的日期为 14 天,2 到 3 之间的日期为 12 天,因此平均值为 13 天。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    平均值只是最大值减去最小值除以值的数量减去一。所以:

    select datediff(max(date), min(date)) / nullif(count(*) - 1, 0)
    from t;
    

    如果你看一下数字,你可以很容易地看到这一点:

     1
     5       . . . 4
     10      . . . 5
     19      . . . 9
    

    平均差为 (4 + 5 + 9) / 3 = 6。

    (19 - 1) / 3 = 6 也不是巧合。这是数学上的确定性。

    你可以很容易地看到这一点。平均差异为:

    ( (5 - 1) + (10 - 5) + (19 - 10) ) / 3
    

    您可以重新排列:

    ( -1 + (5 - 5) + (10 - 10) + 19 ) / 3
    

    这是:

    ( 19 - 1 ) / 3
    

    【讨论】:

      【解决方案2】:

      希望这会有所帮助

      SELECT  AVG(DATEDIFF(Date, NextDate)) 
          FROM    (   SELECT  
                              Date,
                              (   SELECT  MIN(Date) 
                                  FROM    YourTable T2
                                  WHERE   T2.Date > T1.Date
                              ) AS NextDate
                      FROM    YourTable T1
                  ) AS T
      

      *在 YourTable 中使用您的表名

      当行中的两个日期之间的日期范围不重叠时,此方法有效。 如果范围也为 0,则使用 >= 而不是 >

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        相关资源
        最近更新 更多