开发中遇到过问题就是对时间以半个小时分钟分组,如统计08:00-08:30的人数,08:30-09:00的人数,貌似sql中没有这样的函数吧,直接从数据库里查出来,在java里分组也太low了吧

想到方法1 自定义函数,自己实现时间的半个小时转换,统计时调用函数

CREATE  FUNCTION `date_half_hour_format`(in_date TIMESTAMP) RETURNS TIMESTAMP
BEGIN
	DECLARE out_date TIMESTAMP;
	DECLARE s_date VARCHAR(255);
	DECLARE s_minute VARCHAR(2);
	DECLARE int_minute INT;
	SET s_minute = SUBSTRING(in_date, 15, 2);
	SET int_minute = CAST(s_minute AS SIGNED);
	IF int_minute <= 29 THEN
	  SET int_minute = 0;
	  SET s_date = CONCAT(LEFT(in_date, 14),'0',int_minute);
	  SET int_minute = 30;
	  SET s_date = CONCAT(LEFT(in_date, 14),int_minute);
	END IF;
	SET out_date = STR_TO_DATE(s_date,'%Y-%m-%d %H:%i');
	RETURN out_date;

方法2 学过c语言更清楚c语言创建时间都是一个long的时间戳,可以对时间做除法运算,就是时间long的值除以30*60,这样就能得出半个小时的时间了,mysql中有函数unix_timestamp获取long的时间,从long转date的form_unixtime

SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(CURRENT_TIMESTAMP) DIV 1800)*1800)

这样就可以按任意时间分组了
select to_char((daybegin + (level - 1) * 5 / 1440), 'yyyy-mm-dd hh24:mi:ss') as newdaybegin from (select (trunc(sysdate, 'dd')) as daybegin from dual) connect by level <= 288 后面话单报表开发要用到,记录一下。
mysql不同时间粒度下的分组统计 我们在做项目或者数据分析时,经常遇到这样的需求:统计不同时间粒度下的数据分布情况,例如,每一天每个小时网站的访问量,某路口每半个小时通过的车辆数量等。对于此类的问题,一个sql简单的查询就能实现,故特此记录下,方便以后使用。 在MySQL,我的表为:track 数据结构如下所示:
比如按照五分钟时间: to_date(to_char(t.datatime, 'yyyy-mm-dd hh24')||':'||lpad(floor(to_char(t.datatime, 'mi')/5)*5,2,0) || ':00','yyyy-mm-dd hh24:mi:ss') to_date(to_char(t.datatime, 'yyyy-mm-dd hh24'
#按照日期分组统计查询 SELECT date_format(a.F_CREATE_TIME,"%Y-%m-%d") as time,count(distinct a.F_ID) as newcount,count(distinct b.F_ID) as bnewcount,count(distinct c.F_MSR_ID) as cnewcount `t_zcgl_user` a LEFT JOIN `t_qb_gr_smrz` b ON da...
select toStartOfHour(created_at) time_interval , count(*) num from my_table group by toStartOfHour(created_at) 文档摘录: toStartOfDay 将DateTime向前取整到今天的开始。 toStartOfHour 将DateTime向前取整到当前小时的开始。 toStartOfMinute 将DateTime向前取整到当前分钟的开...
sql时间分段的逻辑是将某个时间段内的时间归一化到某个时间点,代码上表现得很清晰 按小时查询 SELECT COUNT(*), DATE_FORMAT(time ,'%Y-%m-%d %H:00:00') as time FROM table GROUP BY time 按分钟查询 SELECT COUNT(*), DATE_FORMAT(time ,'%Y-%m-%d %H:%i:00') as time FROM table GROUP BY time 按自定义分钟(如半小时) SELECT CO