mysql日期序列填充_在比较年度统计数据时填充错过日期的MYSQL数据?

有几种不同的方法可以获得连续日期的结果。我最喜欢的是使用虚拟表或AI PK中现有的一组连续ID来创建所需的完整集。像这样的东西 -

SELECT '2011-01-01' + INTERVAL (id -1) DAY

FROM dummy

WHERE id BETWEEN 1 AND 365这将返回2011年的整套天数,然后可以将LEFT JOIN加入您的电子邮件表以获取计数 -

SELECT `dates`.`date`, COUNT(emails.id)

FROM (

SELECT '2011-01-01' + INTERVAL (id - 1) DAY AS `date`, '2011-01-01 23:59:59' + INTERVAL (id - 1) DAY AS `end_of_day`

FROM dummy

WHERE id BETWEEN 1 AND 365

) `dates`

LEFT JOIN emails

ON `emails`.`datetime` BETWEEN `dates`.`date` AND `dates`.`end_of_day`

GROUP BY `dates`.`date`要填充您的dummy / seq表,您可以手动插入前十个值,然后使用INSERT ... SELECT添加其余值 -

CREATE TABLE dummy (id INTEGER NOT NULL PRIMARY KEY);

INSERT INTO dummy VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

SET @tmp := (SELECT MAX(id) FROM dummy) + 1;

INSERT INTO dummy

SELECT @tmp + id

FROM dummy;您需要在每次运行INSERT ... SELECT查询之前执行SET查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值