关于mysql查询的问题

YIYI_zhang 2018-08-09 06:00:49
根据若干个时间段查询数据,例如当前时间向前依次推30分钟,查询每个时间段之内的数据,应该怎么查啊?求帮助
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YIYI_zhang 2018-08-10
  • 打赏
  • 举报
回复
感谢,已经解决
吉普赛的歌 版主 2018-08-09
  • 打赏
  • 举报
回复
drop table if exists t;
CREATE TABLE t (
id int NOT NULL AUTO_INCREMENT,
`d` datetime NOT NULL,
PRIMARY KEY (`id`)
);
INSERT t (d) values('2018-08-09 18:06');
INSERT t (d) values('2018-08-09 20:05');
INSERT t (d) values('2018-08-09 20:06');
INSERT t (d) values('2018-08-09 20:30');
INSERT t (d) values('2018-08-09 21:05');
INSERT t (d) values('2018-08-09 21:06');

drop table if exists my_dual;
create table my_dual(id int);
#2、创建存储过程(向表my_dual插入数据)
drop PROCEDURE if exists proc_insert_dual;

delimiter //
CREATE PROCEDURE proc_insert_dual(IN v_i INT)
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < v_i
DO
INSERT INTO my_dual VALUES (i);
SET i = i + 1;
END WHILE;
END;//
delimiter ;

#3、调用存储过程(向表my_dual插入5000数字,数字从0开始)
CALL proc_insert_dual(5000);

select
DATE_ADD(NOW(), INTERVAL (-m.id-1)*30 MINUTE) as beginT
,DATE_ADD(NOW(), INTERVAL m.id*(-30) MINUTE) as endT
,group_concat(t.d order by t.d desc separator ' | ') as myTimes
from my_dual as m left join t
on t.d BETWEEN DATE_ADD(NOW(), INTERVAL (-m.id-1)*30 MINUTE) and DATE_ADD(NOW(), INTERVAL m.id*(-30) MINUTE)
where t.d is not null
group by m.id
order by m.id asc;




mysql 没有 sqlserver 那么好用的 master.dbo.spt_values 的序数表, 只好自己做一个。
但 mysql 的字符串聚合 却比 sqlserver 领先了不少。sqlserver 到 2017 才有 STRING_AGG 。
YIYI_zhang 2018-08-09
  • 打赏
  • 举报
回复
没人吗。。。。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧