首页 > 数据库 >SQL查询最近的年、月、周、日的统计数据

SQL查询最近的年、月、周、日的统计数据

时间:2025-01-21 11:58:34浏览次数:1  
标签:GROUP SUB 统计数据 查询 dateStr SQL

    <select id="statTraffic" resultType="com.nuorui.module.platform.domain.vo.StatTotalVO">
        <![CDATA[
            SELECT
              CASE
                WHEN #{dateType} = 0 THEN YEAR(date_series.generated_date)  -- 按年查询
                WHEN #{dateType} = 1 THEN DATE_FORMAT(date_series.generated_date, '%Y-%m')  -- 按月查询
                WHEN #{dateType} = 2 THEN CONCAT(YEAR(date_series.generated_date), '-', LPAD(WEEK(date_series.generated_date), 2, '0'))  -- 按周查询
                WHEN #{dateType} = 3 THEN DATE_FORMAT(date_series.generated_date, '%Y-%m-%d')  -- 按日查询
                ELSE DATE_FORMAT(date_series.generated_date, '%Y-%m-%d')
              END AS dateStr,
              SUM(CASE WHEN p.direction = 1 THEN 1 ELSE 0 END) AS upTotal,
              SUM(CASE WHEN p.direction = 0 THEN 1 ELSE 0 END) AS downTotal
            FROM (
              SELECT
                CASE
                  WHEN #{dateType} = 0 THEN DATE_SUB(CURDATE(), INTERVAL (n.n - 1) YEAR)  -- 按年查询
                  WHEN #{dateType} = 1 THEN DATE_SUB(CURDATE(), INTERVAL (n.n - 1) MONTH)  -- 按月查询
                  WHEN #{dateType} = 2 THEN DATE_SUB(CURDATE(), INTERVAL (n.n - 1) WEEK)  -- 按周查询
                  WHEN #{dateType} = 3 THEN DATE_SUB(CURDATE(), INTERVAL (n.n - 1) DAY)  -- 按日查询
                  ELSE DATE_SUB(CURDATE(), INTERVAL (n.n - 1) DAY)
                END AS generated_date
              FROM (
                SELECT @rownum := @rownum + 1 AS n
                FROM (SELECT 1 FROM information_schema.columns LIMIT #{limit}) a, (SELECT 1) b, (SELECT @rownum := 0) c
              ) n
            ) date_series
            LEFT JOIN plat_vessel_traffic p
              ON (
                (YEAR(p.data_time) = YEAR(date_series.generated_date) AND #{dateType} = 0)  -- 按年查询
                OR (DATE_FORMAT(p.data_time, '%Y-%m') = DATE_FORMAT(date_series.generated_date, '%Y-%m') AND #{dateType} = 1)  -- 按月查询
                OR (YEAR(p.data_time) = YEAR(date_series.generated_date) AND WEEK(p.data_time) = WEEK(date_series.generated_date) AND #{dateType} = 2)  -- 按周查询
                OR (DATE_FORMAT(p.data_time, '%Y-%m-%d') = DATE_FORMAT(date_series.generated_date, '%Y-%m-%d') AND #{dateType} = 3)  -- 按日查询
              )
              AND p.data_time >= DATE_SUB(CURDATE(), INTERVAL 365 DAY)
            GROUP BY dateStr
            ORDER BY dateStr DESC;
            ]]>
    </select>

 

标签:GROUP,SUB,统计数据,查询,dateStr,SQL
From: https://www.cnblogs.com/fangts/p/18683385

相关文章

  • sqlite3 mysql每秒查询性能
     数据库的查询性能(如每秒查询次数,QPS,即QueriesPerSecond)取决于多种因素,包括数据库引擎、硬件配置、查询复杂度、数据量以及系统优化程度等。以下是对SQLite和MySQL每秒查询能力的比较和分析:SQLite每秒查询能力性能特点:SQLite是一个轻量级、文件系统级的数......
  • 通过sqlserver添加修改系统管理员账号.120510
    一,思路:在其他服务器B,通过sa账号远程登录需增加/修改系统管理员账号的服务器A,用sqlserver的xp_cmdshell功能,模拟cmd通过netuser命令进行添加或者修改系统管理员账号。特别提示:此解决方案只适用于服务器没有加域且忘记管理员密码的用户使用,请不要作为非法用途!二,解决方法:0,在服务......
  • MySQL架构总览_查询执行流程_SQL解析顺序
    目录MySQL架构总览查询执行流程连接处理结果SQL解析顺序准备工作FROMWHEREGROUPBYHAVINGSELECTORDERBYLIMIT总结参考书籍MySQL架构总览架构最好看图,再配上必要的说明文字。下图根据参考书籍中一图为原本,再在其上添加上了自己的理解。从上图中我们可以看到,整个架构分为两......
  • SQL Server 2005部署备份任务.120308
    环境:SQLServer2005任务:1,每日凌晨1点给本地sqlserver做本地完整备份,且只保留7天的本地备份;2,每日凌晨5点将本地的备份打包上传到存储服务器。思路:1,sqlserver2005不支持SQLServer2000的sqlmaint命令,所以,需要通过数据库维护计划进行备份,而不能一步成型的写bat脚本;2,备份地址......
  • SQLServer2005恢复Master库.110509
    master库对于SQLServer来说,是很重要的系统数据库,保存着所有Sqlserver的用户信息、数据库信息等,当数据库崩溃时,master数据库的恢复成功与否起着重要的作用。这就跟Oracle的System表空间一样,非常的重要。备份数据前期准备:(1)在备用机准备好和生产机器一样的sql2005数据库环境(注意数......
  • MySQL数据库开启远程访问权限
    1、背景描述默认情况下,MySQL只允许本地登录,即只能在安装MySQL数据库所在的主机环境中访问。在实际开发和使用中,一般需要访问远程服务器的数据库,此时就需要开启服务器端MySQL的远程访问权限。2、查看MySQL的用户表如上图所示,Host列指定了允许用户登录所使用的IP,比如u......
  • PL/SQL 删除外键 ORA-02443: 无法删除约束条件-不存在的约束条件
    在PL/SQL中删除外键,无论是在【对象】窗口可视化操作删除还是用drop语句都会报错:ORA-02443:无法删除约束条件-不存在的约束条件看到有人有同样的问题。亲测之后:情况一:常规操作ALTERTABLEtable_nameDROPCONSTRAINTforeignkeyname;情况二:需要加引号(而且是双引号)ALTERTABL......
  • MySQL 中单独获取已知日期的年月日
    在MySQL中,处理日期和时间是一项常见任务。通常,我们需要从已知的日期中提取年、月、日等部分信息。MySQL提供了一些内置函数,可以方便地进行这些操作。本文将详细介绍如何在MySQL中单独获取已知日期的年、月、日部分。一、提取年份(Year)要从日期中提取年份,可以使用 YEAR() 函数......
  • Mybatis实现RBAC权限模型查询
    RBAC(Role-BasedAccessControl,基于角色的访问控制)是一种常用的权限管理模型,它通过角色来管理用户权限。在RBAC模型中,权限是授予角色的,用户通过扮演某些角色获得相应的权限。本文将介绍如何使用MyBatis实现RBAC权限模型的查询。一、RBAC权限模型简介核心概念用户(User) :系统的......
  • mysql 获取当前时间戳13
    mysql获取当前时间戳13在MySQL中,您可以使用CURRENT_TIMESTAMP或NOW()函数来获取当前的时间戳。这将以'YYYY-MM-DDHH:MM:SS'格式返回当前的日期和时间。如果您需要的是一个UNIX时间戳(即自1970年1月1日以来的秒数),您可以使用UNIX_TIMESTAMP()函数。以下是获取当前UN......