百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> sql中怎样实现日期主动补全
分享文章到:

sql中怎样实现日期主动补全

发布时间:08/01 来源:未知 浏览: 关键词:
第一生成某个范畴的日历表数据,再通过这个日历表连贯查询需要统计数据表的数据,没有的话,默许为0;这样就可以得出这个范畴内完备的数据了。 比来在开发统计拜访功能时,要是数据表里短少某一天的数据,就会致使那天的记载遗失,但显示的时候还是需要那天的数据,没有的话,可以默许为 0,大约想到了两种解决方法:

1. 将数据读出来后,在程序轮回增加短少的数据,但是这关于统计数据范畴可变的需求,可能统计 7 天,30 天,60 天;通历程序来补全数据就显得有点费事了。

2. 第一生成某个范畴的日历表数据,再通过这个日历表连贯查询需要统计数据表的数据,没有的话,默许为 0;这样就可以得出这个范畴内完备的数据了,所以这种方案,更适合这种需求的变化。

此刻通过如下 sql 语句生成日历表:

CREATE TABLE num (i INT);-- 新建一个表用来贮存0-9的数字
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,利便今后盘算工夫
CREATE TABLE  IF NOT EXISTS calendar(DATE DATE); -- 生成一个存储日期的表,date是字段名
-- 这里是生成并插入日期数据
INSERT INTO calendar(DATE) SELECT
    ADDDATE(
        (   -- 起始日期,从2017-1-1开端
            DATE_FORMAT("2017-1-1", '%Y-%m-%d')
        ),
        numlist.id
    ) AS `date`
FROM
    (
        SELECT
            n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000 AS id
        FROM
            num n1
        CROSS JOIN num AS n10
        CROSS JOIN num AS n100
        CROSS JOIN num AS n1000
    ) AS numlist;

施行 sql 后生成 1W 笔记录,从2017-01-01~2044-05-18,这些数据已经脚够用很久了;也可以通过修改相对应的前提,生成更多的数据,这里就不细致注明了,依据需求修改就行。

施行如下 sql 测试:

SELECT COUNT(u.id) AS num, c.date FROM calendar AS c
LEFT JOIN users AS u ON c.date = u.`created_at`
WHERE c.date BETWEEN '2017-05-01' AND '2017-05-07'
GROUP BY c.`date`
ORDER BY c.`date`

得出如下效果:

以上就是sql中怎样实现日期主动补全的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板