【发布时间】:2020-04-17 10:21:20
【问题描述】:
我有一个问题,我不知道是否有可能解决它。 也就是说,我有一个 MySQL 数据库,它有两列:id 和 date。 如何制定一个查询来计算所有日期的平均差异? 例如,1 到 2 之间的日期为 14 天,2 到 3 之间的日期为 12 天,因此平均值为 13 天。
【问题讨论】:
我有一个问题,我不知道是否有可能解决它。 也就是说,我有一个 MySQL 数据库,它有两列:id 和 date。 如何制定一个查询来计算所有日期的平均差异? 例如,1 到 2 之间的日期为 14 天,2 到 3 之间的日期为 12 天,因此平均值为 13 天。
【问题讨论】:
平均值只是最大值减去最小值除以值的数量减去一。所以:
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
【讨论】:
希望这会有所帮助
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,则使用 >= 而不是 >
【讨论】: