前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql统计近30天的数据,无数据的填充0

Mysql统计近30天的数据,无数据的填充0

原创
作者头像
一缕82年的清风
修改2021-11-25 10:38:58
1.1K0
修改2021-11-25 10:38:58
举报
文章被收录于专栏:lsqingfeng

Mysql统计近30天的数据,无数据的填充0。 这个应该是我们在做统计分析的时候,经常遇到的一个需求。

先说一般的实现方式,就是按照日期进行分组,但是这样会有一个问题,如果数据库表中有一天没有数据,那么是统计不出来结果的。类似下图

代码语言:javascript
复制
2020-01-01  10
2020-01-03  20
2020-01-04   4

这个时候,我们发现,2020-01-02 这一天是没有数据的,我们希望没有数据的这一天得到也能返回日期,而对应的数据是0,期望如下:

代码语言:javascript
复制
2020-01-01  10
2020-01-02  0
2020-01-03  20
2020-01-04  4

这时候,单单group by就没办法实现了。

那应该怎么办呢?

一般情况就是我们应该先获取一个日期的虚拟表,把这30天的时间都列出来,然后用这个日期虚拟表再去关联我们的业务表,关联没数据的值设置为空即可,那么怎么得到近30天的日期的,给出sql实现方式:

代码语言:javascript
复制
    SELECT
        @s := @s + 1 AS indexs,
        DATE_FORMAT( DATE( DATE_SUB( CURRENT_DATE, INTERVAL @s DAY ) ), '%Y-%m-%d' ) AS dates 
    FROM
        mysql.help_topic,
        ( SELECT @s := -1 ) temp  #不想包含当天,@s:=0
    WHERE
        @s < 30 
    ORDER BY
        dates 

运行得到的结果如下

当然可根据自己的需要进行排序,时间有了,接下来直接关联自己的业务表就可以了,给出demo:

代码语言:javascript
复制
SELECT
    date_table.dates AS dateValue,
    IFNULL( temp.count, 0 ) AS count 
FROM
    (
    SELECT
        @s := @s + 1 AS indexs,
        DATE_FORMAT( DATE( DATE_SUB( CURRENT_DATE, INTERVAL @s DAY ) ), '%Y-%m-%d' ) AS dates 
    FROM
        mysql.help_topic,
        ( SELECT @s := 0 ) temp 
    WHERE
        @s < 30 
    ORDER BY
        dates 
    ) date_table
    -- 关联业务表
    LEFT JOIN (
    SELECT LEFT
        ( create_time, 10 ) AS dateValue,
        count( * ) AS count 
    FROM
        monitor_log_record t1 
    WHERE
        t1.log_type = 1 
        AND t1.error_type = 1 
        AND t1.project_id = 1 
    GROUP BY
        LEFT ( create_time, 10 ) 
    ) temp ON date_table.dates = temp.dateValue 
ORDER BY
    date_table.dates DESC

好了,记录一下,希望可以帮助到你。有帮助的话记得点赞收藏加关注,感谢!!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档