我一直在搜索,似乎无法找到一个问题,答案对我来说很好.我有一个包含近200万行的表,每行都有一个MySQL Date格式字段.
我想计算(在几秒钟内)插入行的频率,因此使用SQL查询计算出所有行的日期之间的平均差异.
有任何想法吗?
– 编辑 –
这是我的桌子的样子
id, name, date (datetime), age, gender
解决方法:
如果您想知道插入行的频率(平均),我认为您不需要计算所有差异.您只需要总结相邻行之间的差异(基于时间戳的相邻行),并将结果除以加数的数量.
公式
((T1-T0) + (T2-T1) + … + (TN-TN-1)) / N
显然可以简化为仅仅
(TN-T0) / N
所以,查询将是这样的:
SELECT TIMESTAMPDIFF(SECOND, MIN(date), MAX(date)) / (COUNT(*) - 1)
FROM atable
确保行数大于1,否则您将得到Division By Zero错误.不过,如果您愿意,可以通过一个简单的技巧来防止错误:
SELECT
IFNULL(TIMESTAMPDIFF(SECOND, MIN(date), MAX(date)) / NULLIF(COUNT(*) - 1, 0), 0)
FROM atable
现在,您可以安全地对具有单行的表运行查询.