mysql 近一年、近一月、昨日、近一周等时间统计

这篇具有很好参考价值的文章主要介绍了mysql 近一年、近一月、昨日、近一周等时间统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

根据业务需求,我们需要统计得到各式各样的数据,以下是展示按照时间条件进行的统计样例。
--近一年
select * from 表名 where YEAR (create_time )= YEAR (date_sub( now(), INTERVAL 0 YEAR ))
--近一月
select * from 表名 where date(create_time) >= DATE_SUB(CURDATE(),INTERVAL 30 DAY)
--近一周
select * from 表名 where date(create_time) >= DATE_SUB(CURDATE(),INTERVAL 7 DAY)
--昨日
select * from 表名 where to_days(now( ) ) - to_days( create_time) <= 1

在此基础上,有部分业务场景需要符合一些统计图形进行展示:
一、统计近一年每个月的数据

     SELECT
            v.`month`,
            IFNULL(b.settlement_total_amount,0) settlement_total_amount,
            IFNULL(b.supplier_sharing,0) supplier_sharing
        FROM
            (
                SELECT
                    DATE_FORMAT( CURDATE(), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 1 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 2 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 3 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 4 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 5 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 6 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 7 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 8 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 9 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 10 MONTH ), '%Y-%m' ) AS `month` UNION
                SELECT
                    DATE_FORMAT(( CURDATE() - INTERVAL 11 MONTH ), '%Y-%m' ) AS `month`
            ) v
                LEFT JOIN (
                SELECT LEFT
                    ( a.create_time, 7 ) AS `month`,
                    sum(a.settlement_total_amount) as settlement_total_amount,
                    sum(a.supplier_sharing) as supplier_sharing
                FROM
                    settlement_record AS a
                WHERE
                    a.create_time >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
                GROUP BY
                    `month`
            ) AS b ON v.`month` = b.`month`
        GROUP BY
            v.`month`

mysql 近一年、近一月、昨日、近一周等时间统计
二、统计近一月30天的数据

   SELECT
            a.date_str,
            IFNULL(b.settlement_total_amount,0) settlement_total_amount,
            IFNULL(b.supplier_sharing,0) supplier_sharing
        FROM
            (
                SELECT
                    @cdate := date_add( @cdate, INTERVAL - 1 DAY ) AS date_str
                FROM
                    ( SELECT @cdate := date_add(CURDATE(), INTERVAL + 1 DAY ) FROM course_date ) tmp1
                where @cdate > DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
            ) a
                LEFT JOIN (
                SELECT
                    DATE_FORMAT( create_time, '%Y-%m-%d' ) AS days,
                    sum(settlement_total_amount) as settlement_total_amount,
                    sum(supplier_sharing) as supplier_sharing
                FROM
                    settlement_record
                WHERE
                    date(create_time) >= DATE_SUB(CURDATE(),INTERVAL 30 DAY)
        GROUP BY days
            ) b on a.date_str = b.days
        ORDER BY a.date_str desc

mysql 近一年、近一月、昨日、近一周等时间统计
ps:course_date表可以试任意一个表,但是前提表的数据量必须大于查询的天数跨度
三、当天按照小时展示

    SELECT
            a.za_hour,
            IFNULL(b.settlement_total_amount,0),
            IFNULL(b.supplier_sharing,0)
        FROM
            (
                SELECT
                    0 AS za_hour UNION
                SELECT
                    1 AS za_hour UNION
                SELECT
                    2 AS za_hour UNION
                SELECT
                    3 AS za_hour UNION
                SELECT
                    4 AS za_hour UNION
                SELECT
                    5 AS za_hour UNION
                SELECT
                    6 AS za_hour UNION
                SELECT
                    7 AS za_hour UNION
                SELECT
                    8 AS za_hour UNION
                SELECT
                    9 AS za_hour UNION
                SELECT
                    10 AS za_hour UNION
                SELECT
                    11 AS za_hour UNION
                SELECT
                    12 AS za_hour UNION
                SELECT
                    13 AS za_hour UNION
                SELECT
                    14 AS za_hour UNION
                SELECT
                    15 AS za_hour UNION
                SELECT
                    16 AS za_hour UNION
                SELECT
                    17 AS za_hour UNION
                SELECT
                    18 AS za_hour UNION
                SELECT
                    19 AS za_hour UNION
                SELECT
                    20 AS za_hour UNION
                SELECT
                    21 AS za_hour UNION
                SELECT
                    22 AS za_hour UNION
                SELECT
                    23 AS za_hour
            ) a
                LEFT JOIN (
                SELECT HOUR
                    ( create_time ) AS days,
                    sum( settlement_total_amount ) AS settlement_total_amount,
                    sum( supplier_sharing ) AS supplier_sharing
                FROM
                    settlement_record
                WHERE
                    DATE_FORMAT( create_time, '%Y-%m-%d' ) = DATE_FORMAT( '', '%Y-%m-%d' )
                GROUP BY days
            ) b ON a.za_hour = b.days
        ORDER BY a.za_hour

mysql 近一年、近一月、昨日、近一周等时间统计
仅用于自己学习参考,如有错误,可提醒修改。文章来源地址https://www.toymoban.com/news/detail-510947.html

到了这里,关于mysql 近一年、近一月、昨日、近一周等时间统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一周是一年的2%

    原文地址:一周是一年的2%----293期科技爱好者周刊 本文由博客一文多发平台 OpenWrite 发布!

    2024年03月26日
    浏览(28)
  • JAVA获取昨日和今日日期时间

    2024年01月16日
    浏览(30)
  • MySQL时间分组:按小时统计数据(mysql按小时分组)

    MySQL时间分组是一类涉及MySQL数据库的SQL语句,能够以小时对数据进行分组统计。 比如,如果你想根据一定的时间间隔,把MySQL数据库中的记录分成几组,那么MySQL时间分组技术就派上用场了。 MySQL时间分组主要使用MySQL语句YEAR(), WEEK(), HOUR()和GROUP BY来实现,按小时统计数据实

    2024年02月12日
    浏览(40)
  • 【实用】Mysql 按照时间(年月周日)维度统计,不存在时间数据 自动补充 0 数值

    ps: 网上看了一大堆文章, 介绍的东西真的是很够呛, 就没一个能真正用起来的, 各个都是自动补,然后很多都是不好用的。 我自己整理一篇,这是真能用。 本篇内容 : ① 按照 日 、周、月 、年  的维度 去对数据 做分组统计  ② 不存在的数据自动补充 0  (实用) 不

    2024年02月03日
    浏览(37)
  • mysql统计近7天数据量,,按时间戳分组

    可以使用以下 SQL 语句来统计近7天的数据量,并按时间戳分组。如果某一天没有数据,则将其填充为0。 解释说明: DATE_FORMAT(FROM_UNIXTIME( timestamp ), \\\'%Y-%m-%d\\\') AS date 将时间戳转换为日期格式,例如 2021-03-01。 COUNT(*) AS count 统计每天数据的数量。 WHERE timestamp = UNIX_TIMESTAMP(DATE_SUB

    2024年02月13日
    浏览(45)
  • Python基础(适合初学-完整教程-学习时间一周左右-节约您的时间)

    Python基础——核心文章        本系列博客所有内容都是【 实际操作 】为主,部分内容一定要解释说明的会伴随少量的理论说明,在【 最短时间内 】让大家【 掌握 】真正的【 实操技能 】才是实打实的【 为您创造价值 】。 系统版本:win10、win11 开发工具:PyCharm Community社

    2024年02月19日
    浏览(25)
  • 我的创作纪念日——一年的时间可以改变很多

    不知不觉来到CSDN已经创作一年了。打心底讲,对于在CSDN开始坚持创作的原因,我用一句话来概括最合适不过了——“无心插柳柳成荫” 为什么这么说呢? 这要从我的一篇博客说起——《输入命令Javac报错详解》: 那也是我第一次接触到Java这门语言,想必大家在最开始学习

    2023年04月08日
    浏览(25)
  • Java获取今天、本周、本月、本季度、上月、上一年的时间范围

    1、获取本月的第一天和最后一天 2、获取今天的时间范围 3、获取本周的第一天和最后一天 4、获取上个月的时间范围 5、获取本季度的第一天和最后一天 6、获取今年的第一天和最后一天 7、获取上一年的第一天和最后一天

    2024年02月02日
    浏览(32)
  • 单片机RTC及时钟芯片的时间到底从哪一年起始?

    实时时钟RTC在嵌入式系统中是常用的功能,有的单片机有RTC功能,也有专用的RTC芯片,如DS1302、DS1307等。但RTC的“年寄存器”长度有限,一般不会包含所有年份,都是从0开始,到某个数字结束。这个开始的年份“0”到底是哪一年呢?很多人说是1970年1月1日开始,真是这样吗

    2024年01月22日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包