Hyd*_*erA 21 mysql datetime date-arithmetic
假设这个表:
id date
----------------
1 2010-12-12
2 2010-12-13
3 2010-12-18
4 2010-12-22
5 2010-12-23
Run Code Online (Sandbox Code Playgroud)
如何仅使用MySQL查询找到这些日期之间的平均间隔?
例如,该表的计算结果为
(
( 2010-12-13 - 2010-12-12 )
+ ( 2010-12-18 - 2010-12-13 )
+ ( 2010-12-22 - 2010-12-18 )
+ ( 2010-12-23 - 2010-12-22 )
) / 4
----------------------------------
= ( 1 DAY + 5 DAY + 4 DAY + 1 DAY ) / 4
= 2.75 DAY
Run Code Online (Sandbox Code Playgroud)
Veg*_*sen 40
直觉上,你所要求的应该等于第一个和最后一个日期之间的间隔,除以日期数减1.
让我更彻底地解释一下.想象一下,日期是一行上的点(+存在日期,-日期缺失,第一个日期是第12日,我将最后日期更改为12月24日以用于说明目的):
++----+---+-+
Run Code Online (Sandbox Code Playgroud)
现在,你真正想要做的是,在这些行之间均匀地分隔日期,并找出它们之间的时间长度:
+--+--+--+--+
Run Code Online (Sandbox Code Playgroud)
要做到这一点,你只需要花费最后一天和第一天之间的天数,在这种情况下,24 - 12 = 12,并除以你必须间隔的间隔数,在这种情况下为4 : 12 / 4 = 3.
使用MySQL查询
SELECT DATEDIFF(MAX(dt), MIN(dt)) / (COUNT(dt) - 1) FROM a;
Run Code Online (Sandbox Code Playgroud)
这适用于此表(您的值返回2.75):
CREATE TABLE IF NOT EXISTS `a` (
`dt` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `a` (`dt`) VALUES
('2010-12-12'),
('2010-12-13'),
('2010-12-18'),
('2010-12-22'),
('2010-12-24');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7990 次 |
| 最近记录: |