指定时间内每天显示一条数据,即使不存在也显示

hdcopy2001 2016-08-19 11:59:43
测试的表和数据大约是这样的
DROP TABLE IF EXISTS `tt`;
CREATE TABLE `tt` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`reccount` int(11) DEFAULT NULL,
`dt` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=gbk;

-- ----------------------------
-- Records of tt
-- ----------------------------
INSERT INTO `tt` VALUES ('1', 'a', '10', '2016-08-01');
INSERT INTO `tt` VALUES ('2', 'a', '11', '2016-08-03');
INSERT INTO `tt` VALUES ('3', 'a', '12', '2016-08-04');
INSERT INTO `tt` VALUES ('4', 'b', '8', '2016-08-01');
INSERT INTO `tt` VALUES ('5', 'b', '15', '2016-08-05');




期望是这样的,例如输入时间段 ,从 2016-08-01到2016-08-05,显示类似这样,
a 10 2016-08-01
a 0 2016-08-02
a 11 2016-08-03
a 12 2016-08-04
a 0 2016-08-05
b 8 2016-08-01
b 0 2016-08-02
b 0 2016-08-03
b 0 2016-08-04
b 15 2016-08-05

每个不同的name,每天有数据显示数据,没有数据也显示一条计数为0
...全文
82 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdcopy2001 2016-08-19
  • 打赏
  • 举报
回复
OK,分分分了。 目前是调用这个过程生成日期表的,参数起始日(相对当天),生成数量,可以重复执行的。
CREATE PROCEDURE `aa`(istart int(11),ilen int(11))
BEGIN
	DECLARE c int default 0;
  DECLARE done INT DEFAULT 0;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
	declare continue handler for 1172 set done=2;	
	declare continue handler for 1062 set done=3;	

	set c = istart;
	while c < istart + ilen do
		insert into days VALUES( DATE_FORMAT(DATE_ADD(NOW(),INTERVAL c DAY), '%Y-%m-%d'));
		set c=c+1;
	end while;
END
致命的西瓜 2016-08-19
  • 打赏
  • 举报
回复
时间列肯定有索引的,数据量肯定不大,效率没什么影响,查询注意增加时间筛选条件就好了
zjcxc 2016-08-19
  • 打赏
  • 举报
回复
mysql 的函数不能返回表,不然写个函数就简单多了
zjcxc 2016-08-19
  • 打赏
  • 举报
回复
也可以保持现在的模式不变,设置一个 job 去维护这个表中的数据
zjcxc 2016-08-19
  • 打赏
  • 举报
回复
如果时间间隔相对固定,你可以建立一个从0到N的序号表,查的时候根据开始时间和结束时间算出所有日期,再做关联查询 效率差一些,但基本上不用考虑维护表中数据(只要有足够的数据就行)
hdcopy2001 2016-08-19
  • 打赏
  • 举报
回复
引用 1 楼 wangjian0228 的回复:
做一张时间表,格式和tt的时间字段相同,用来做为主表关联tt 时间表创建可以预计算几十年之后
几十年。。。现在我就是用这种方法,不过时间只有前100后400天的, 再多?影响效率,影响心情,到时间我还在那自然会加,我不在那就随意了。 不知道还有没有更好的方法。。。。
致命的西瓜 2016-08-19
  • 打赏
  • 举报
回复
做一张时间表,格式和tt的时间字段相同,用来做为主表关联tt 时间表创建可以预计算几十年之后

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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