旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

sql中怎样完成日期自动补全【MySQL教程】,sql

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:28评论:0


导读:最近在开辟统计接见功用时,假如数据内外缺乏某一天的数据,就会致使那天的纪录丧失,但显现的时刻照样须要那天的数据,没有的话,能够默以为0,也许想到了两种解决办法:1....
最近在开辟统计接见功用时,假如数据内外缺乏某一天的数据,就会致使那天的纪录丧失,但显现的时刻照样须要那天的数据,没有的话,能够默以为 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中怎样完成日期自动补全的细致内容,更多请关注ki4网别的相干文章!

标签:sql


欢迎 发表评论: