多语言展示
当前在线:302今日阅读:103今日分享:49

sql 如何按半小时分组

在mysql表中将行数据按照时间字段每整半小时归成一类做数据统计。
工具/原料
1

Mysql服务

2

Navicat for MySQL

方法/步骤
1

首先,来理一下解决思路。 所谓的按半小时分组就是将半小时内的时间划为一组,比如:2019-01-01 00:31 2019-01-01 00:322019-01-01 00:33被分到2019-01-01 00:30这一组 2019-01-01 00:01 2019-01-01 00:022019-01-01 00:03辈分到2019-01-01 00:00这一组, 看一下原表数据,那前4条应该被归到2015-07-27 17:30这组,第5条到第10条应该被归到2015-07-27 18:00这组

2

根据具体数据,我们看一下写出来的SQL语句,大概就是先利用UNIX_TIMESTAMP函数将url_state_date字段转化成秒,其表示从1970-01-01 00:00:00到url_state_date所经历的秒数,暂时定义为state_date_sec,然后对其做半小时的向下取整,最后再做Group归并。1800秒:半小时floor(state_date_sec/1800) : 对于半小时的个数做向下取整floor(state_date_sec/1800) * 1800: 取得整半小时的时间

3

运行后查看结果,可以看到 2015-07-27 17:30这组有4条数据,2015-07-27 18:00这组有6条数据,符合我们之前的推理。

4

如上我们是对半小时做向下取整的,根据需求我们也可以做向上取整,此时,我们只需将函数floor换成ceill1800秒:半小时ceil(state_date_sec/1800) : 对于半小时的个数做向下取整ceil(state_date_sec/1800) * 1800: 取得整半小时的时间

5

现在我们对于分组的url_state_date只是做了个数的统计,count函数,那数据库中还有其他更加丰富的函数,比如,max,min,avg等统计函数,大家可以根据自己的需求来做选择

注意事项

此次我们在mysql下做测试,可能sql语句和在sqlserver,oracle下的有点不一样,因为很多内部函数都是不一样的,还有一些写法也有差别,但是解决思路还是一样的。

推荐信息