由于碰到一个统计数据的问题,要求是按照时间每3分钟统计一次数量。
环境:数据表里有时间字段,时间精确到(秒)级别,但是要3分钟统计一次表中的数据量。
解决方法:
第一个方法,是分时间段统计,用case解决每个时间段都精确的写出来。
但是表中的数据已经跨年了,这种方法仅适合统计的时间跨度比较大的情况(比如统计每年的数据量)。
第二个方法,把时间处理,思路是这样的。
首先,将时间截取到分钟,然后将分钟的时间“除3”取整(同样合适按照一个小时60分钟所有能整除的数,比如5分钟、6分钟、10分钟、20分钟、30分钟等);
其次,将得到的时间处理成正常需要显示的时间,因为上边已经取整了,分钟的数据缩小了3倍,需要在分钟的基础上乘3;
最后,将数据按照时间统计。
结束。
以mysql为例:
将时间截取到分钟,并整除,再拼接,concat(date_format(datetime,'%y-%m-%d %h:'),floor(date_format(datetime,'%i')/3)*3,':00');
得到的结果是将 datetime 字段,不到3分钟的时间全部都处理成整3分钟。
即:2016-03-08 15:21:00 ~ 2016-03-08 15:23:59 之间的时间都 变成 2016-03-08 15:21:00,这样,3分钟以内的时间就变成同一个时间。
下一步统计就很简单了吧,直接以时间统计需要统计的字段就好了。
这种方法还适合很多其他时间段统计,只要是能整除该时间单位进制的都行,比如24小时进制的分2、3、4、6个小时统计。