mysql 数据库统计出现误差, 在spring的调度器和程序逻辑都正常的情况下, 可以使用如下方法

ESP32-CAM入门教程 ArduinoESP32-CAM下载模块(接上USB就能用,很方便,如果没有买就只有资金用USB-TTL了)如下图两个合在一起如下图。 阅读详情

1,查看调度器里面的配置, 查到数据的根位置,可以直接写储存过程来对统计表进行重新统计,, 如下, 我只贴一个例子--->


统计表能直接用联合查询可以把字段列出的:::------.>如下


DELIMITER $$


USE `bbbb`$$


DROP PROCEDURE IF EXISTS `A0_history_user_gdata_statistics_total_count_by_age_range_proc`$$


CREATE DEFINER=`root`@`%` PROCEDURE `A0_history_user_gdata_statistics_total_count_by_age_range_proc`()
BEGIN
  DECLARE vId VARCHAR (50) ;
  DECLARE vOrgId INTEGER (50) ;
  DECLARE vOrgPath VARCHAR (40) ;
  DECLARE vTime DATETIME ;
  DECLARE vQuantity INT ;
  DECLARE vAgeRange INTEGER(2) ;
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT 0;
  DECLARE iCount INT ;
  DECLARE cur CURSOR FOR 
  SELECT 
 u.`organizationId`,
 o.`organizationPath`,
 MAX(u.`CREATE_TIME`) creatTime,
 CASE
WHEN (DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) < 18 THEN 1
WHEN ((DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) BETWEEN 18 AND 29) THEN 2
WHEN ((DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) BETWEEN 30 AND 39) THEN 3
WHEN ((DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) BETWEEN 40 AND 49) THEN 4
WHEN ((DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) BETWEEN 50 AND 59) THEN 5
WHEN ((DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) BETWEEN 60 AND 69) THEN 6
WHEN ((DATE_FORMAT(NOW(), '%Y')-LEFT(i.`BIRTHDAY`,4)) BETWEEN 70 AND 150) THEN 7
ELSE 
CASE
WHEN (DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) < 18 THEN 1
WHEN ((DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) BETWEEN 18 AND 29) THEN 2
WHEN ((DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) BETWEEN 30 AND 39) THEN 3
WHEN ((DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) BETWEEN 40 AND 49) THEN 4
WHEN ((DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) BETWEEN 50 AND 59) THEN 5
WHEN ((DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) BETWEEN 60 AND 69) THEN 6
WHEN ((DATE_FORMAT(NOW(), '%Y')-SUBSTRING(u.`IDCARD`,7,4)) BETWEEN 70 AND 150) THEN 7
ELSE 
   CASE
WHEN  i.`AGE` < 18 THEN 1
WHEN ( i.`AGE` BETWEEN 18 AND 29) THEN 2
WHEN ( i.`AGE` BETWEEN 30 AND 39) THEN 3
WHEN ( i.`AGE` BETWEEN 40 AND 49) THEN 4
WHEN ( i.`AGE` BETWEEN 50 AND 59) THEN 5
WHEN ( i.`AGE` BETWEEN 60 AND 69) THEN 6
WHEN ( i.`AGE` BETWEEN 70 AND 150) THEN 7
ELSE 3
   END
  END
 END ageRange,
 COUNT(1) AS quantity       
FROM
 `t_user_gdata` u,`t_user_organization` o,`t_user_info` i
WHERE u.`organizationId`=o.`organizationId`
AND u.`ID`=i.`USERID`
-- AND DATE_FORMAT(u.`CREATE_TIME`,'%Y-%m-%d') = DATE_ADD(DATE_FORMAT(NOW(),'%Y-%m-%d'),INTERVAL -1 DAY)
GROUP BY u.`organizationId`,o.`organizationPath`,ageRange;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1 ;
  /*删除历史数据*/
  DELETE 
  FROM
    t_user_gdata_statistics_total_count_by_age_range ;
  #set iCount = 0;
  /*对历史数据进行重新统计*/
  OPEN cur ;
  REPEAT
    FETCH cur INTO vOrgId,
    vOrgPath,
    vTime,
    vAgeRange,
    vQuantity;
    IF done = 0 THEN
    SET vId = REPLACE(UUID(), '-', '') ;
    INSERT INTO t_user_gdata_statistics_total_count_by_age_range (
      id,
      ageRange,
      quantity,
      organizationId,
      organizationPath
    ) VALUE (
      vId,
      vAgeRange,
      vQuantity,
      vOrgId,
      vOrgPath
    ) ;
    #set iCount = iCount + 1;
    #select CONCAT('循环次数:', iCount) ;
    END IF;
    UNTIL done 
  END REPEAT ;
  CLOSE cur ;
END$$


DELIMITER ;





如果有两张表,可以写两个存储过程 在删除统计表数据的时候任选一张::如下----->


DELIMITER $$


USE `bbbb`$$


DROP PROCEDURE IF EXISTS `A0_history_user_gdata_statistics_measurement_by_jiankangting`$$


CREATE DEFINER=`root`@`%` PROCEDURE `A0_history_user_gdata_statistics_measurement_by_jiankangting`()
BEGIN
  DECLARE vId VARCHAR (50) ;
  DECLARE vTimes VARCHAR (10) ;
  DECLARE vNormalQuantity INT(11) ;
  DECLARE vBussinessTypeId INT(11);
  DECLARE vOrganizationId INT (11);
  DECLARE vOrganizationPath TEXT ;
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT 0;
  DECLARE iCount INT ;
  DECLARE cur CURSOR FOR 
-- 查询健康亭每个测量项的总正常次数
SELECT 
DATE_FORMAT (t.testDate,'%Y-%m-%d') times,
COUNT(*) normalQuantity, 
t.`bussinessTypeId`  bussinessTypeId,
t.`organizationId`  organizationId, 
t.organizationPath  organizationPath
FROM 
`t_user_measurement_ref` t
WHERE 
t.`userGroupId` 
IN (3, 4, 16, 19, 25, 36, 40, 48)

AND t.`source` = 17 GROUP BY t.`bussinessTypeId`, t.`organizationId`, t.`organizationPath`; 
 
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1 ;
  /*删除历史数据*/
  DELETE 
  FROM
    t_user_measurement_total_by_jiankangting ;
  #set iCount = 0;
  /*对历史数据进行重新统计*/
  OPEN cur ;  
  REPEAT
    FETCH cur INTO 
    vTimes,
    vNormalQuantity,
    vBussinessTypeId,
    vOrganizationId,
    vOrganizationPath;
    
    IF done = 0 THEN
    SET vId = REPLACE(UUID(), '-', '') ;
    INSERT INTO t_user_measurement_total_by_jiankangting (
      id,
   times, 
  normalQuantity,
  bussinessTypeId,
  organizationId,
  organizationPath
    ) VALUE (
      vId,
      vTimes,
    vNormalQuantity ,
    vBussinessTypeId,
    vOrganizationId,
    vOrganizationPath
    ) ;
    #set iCount = iCount + 1;
    #select CONCAT('循环次数:', iCount) ;
    END IF;
    UNTIL done 
  END REPEAT ;
  CLOSE cur ;
END$$


DELIMITER ;







2.


DELIMITER $$


USE `bbbb`$$


DROP PROCEDURE IF EXISTS `A0_history_user_gdata_statistics_measuringabnormal_by_beikangyi`$$


CREATE DEFINER=`root`@`%` PROCEDURE `A0_history_user_gdata_statistics_measuringabnormal_by_beikangyi`()
BEGIN
  DECLARE vId VARCHAR (50) ;
  DECLARE vTimes VARCHAR (10) ;
  DECLARE vNormalQuantity INT(11) ;
  DECLARE vBussinessTypeId INT(11);
  DECLARE vOrganizationId INT (11);
  DECLARE vOrganizationPath TEXT ;
  -- 遍历数据结束标志
  DECLARE done INT DEFAULT 0;
  DECLARE iCount INT ;
  DECLARE cur CURSOR FOR 
-- 先查询到前一天倍康仪每个测量项的总异常次数 
SELECT
DATE_FORMAT (t.testDate,'%Y-%m-%d') times,
COUNT(*) abnormalQuantity, 
t.`bussinessTypeId`,
t.`organizationId`, 
t.`organizationPath`
FROM 
`t_user_measuringabnormal_ref` t
WHERE 
-- DATE_FORMAT(t.`testDate`, '%Y-%m-%d') = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL - 1 DAY),'%Y-%m-%d') AND 
t.`source` = 9 
GROUP BY t.`bussinessTypeId`, t.`organizationId`, t.`organizationPath`; 
 
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1 ;
  /*之前数据已经删除过历史数据*/
 -- DELETE 
 -- FROM
  --  t_user_measurement_total_by_beikangyi ;
  #set iCount = 0;
  /*对历史数据进行重新统计*/
  OPEN cur ;  
  REPEAT
    FETCH cur INTO 
    vTimes,
    vNormalQuantity,
    vBussinessTypeId,
    vOrganizationId,
    vOrganizationPath;
    
    IF done = 0 THEN
    SET vId = REPLACE(UUID(), '-', '') ;
    INSERT INTO t_user_measurement_total_by_beikangyi (
      id,
   times, 
  abnormalQuantity,
  bussinessTypeId,
  organizationId,
  organizationPath
    ) VALUE (
      vId,
      vTimes,
    vNormalQuantity ,
    vBussinessTypeId,
    vOrganizationId,
    vOrganizationPath
    ) ;
    #set iCount = iCount + 1;
    #select CONCAT('循环次数:', iCount) ;
    END IF;
    UNTIL done 
  END REPEAT ;
  CLOSE cur ;
END$$


DELIMITER ;



涉及两张表的话在系统执行的时候必须执行先删除的操作.


经验之谈..

Linux 之 supervisor安装和使用 运行Supervisor的后台服务,它用来启动和管理那些你需要Supervisor管理的子进程,响应客户端发来的请求,重启意外退出的子进程,将子进程的stdout和stderr写入日志,响应事件等。它是Supervisor最核心的部分。 阅读详情

相关推荐

MySQL 中FLOAT 和 DOUBLE 存在误差原因

MySQL用4个存储存储float类型,用 8 个字节来存储 double类型数据。都是用二进制方式进行存储。当我们明白小数转二进制后就会知道,如果尾数不是 0 或 5(比如 9.624),你就无法用一个二进制数来精确表达。进而,就只好在取值允许的范围内进行四舍五入。

m0_71319472的博客 934

Android 桌面小组件 AppWidgetProvider

桌面小组件,绝对是小程序中的小程序,说白了就是任何复杂一丁点的操作都适合做成桌面小组件。所以这里采用的演示的例子,就只有一个白色圆角背景,外加一个文本框,显示文字。小组件的教程网上一搜一大堆,所以我这里主要就是介绍一些坑的地方,跟大致处理流程,具体细节还得看其他大神的骚操作。

qq_33601179的博客 6584

Mysql 计算时间差、按条件求和、计算百分比

1. 计算两个时间差 TIMESTAMPDIFF(时间单位,参数1,参数2) 参数1是小日期,参数2是大日期,时间单位为时间差的单位: select TIMESTAMPDIFF(YEAR, '2017-08-13 00:00:00', '2018-08-14 00:00:00'); //年 返回1 select TIMESTAMPDIFF(QUARTER, '2017-08-13 00:00:00', '2018-08-14 00:00:00'); //季度 返回4 select TIMESTAMPDIFF

nann-viiv 的博客 2204

深入解析Buck开关电源中的死区时间设计及其对系统性能的影响

本文深入解析了Buck开关电源中死区时间的设计原理及其对系统性能的关键影响。死区时间通过防止上下管同时导通来避免穿通电流,确保系统安全。文章详细探讨了其工作机制、设置时的效率与安全权衡,以及不当设置对效率、稳定性和EMI的连锁反应,并提供了基于实测的调试方法与实战案例。

Apple的专栏 1130

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+

mysql 不损失精度浮点_mysql 浮点型运算误差原因分析及解决方法

在进行金融财务等数值运算时,请使用decimal 类型,不要使用float和double类型!因为decimal的精度最高如下C#代码:float a = 0.65f;float b = 0.6f;float c = a - b;此时c为多少?0.05?错误!此时c为0.0499999523!为什么?其根本原因是计算机所使用二进制01代码无法准确表示某些带小数位的十进制数据。下面我们来分析下:我们...

weixin_30393279的博客 688

SPECweb2009调优指南

 SPECweb2009 是衡量 Web 服务器性能和能效的标准化基准,可以对 Web 服务器的并发数进行性能测试,评测 Web 服务器能够支持的最大同时连接数的客户端/服务器(每秒能够响应的最大请求数)。为充分利用服务器性能,提升SPECweb2009测试结果,可通过增大系统进程数、优化服务器软件参数、绑核以及优化参数等。

developersupport的博客 2607

mysql使用聚合函数avg()由于值为null导致的计算结果偏离期望值处理方案

实践一个开发中遇到的问题,采用mysql的avg()求平均数所得结果和期望值不一致问题。 一共5条数据,业务场景意思描述为5个学生数学科目的平均分,即求student表math字段的平均值,如下图 执行sql select avg(math) from student; 期望值是5000,但是结果是20000,如下图 查了一下sql聚合函数的相关内容,在这篇文章中找到问题原因,感谢作者,原文MySQL的聚合函数是否忽略NULL 所以在sql上面加判空处理,修改后的sql select avg(ifn

qq_38349413的博客 1931

基于四旋翼模型的火箭型无人机视线角保持控制仿真设计

本文针对火箭型无人机的视线角保持控制问题展开研究。基于四旋翼动力学模型,通过改造设计了一种摄像头朝上安装的特殊无人机系统,用于追踪空中目标。文章详细推导了坐标系定义、运动学和动力学方程,重点分析了摄像头安装与视线几何关系,建立了目标运动模型和视线向量计算方法。通过解算期望姿态角,实现了使机体Z轴始终对准目标的控制目标。仿真结果表明,该系统能有效完成视线角保持任务,为空对空监视等应用场景提供了可行方案。~~~~~

huanghm88的专栏 142

【openGauss实战1】openGauss基于CentOS8的部署

基于openGauss数据库在CentOS8上的安装实践。

IT邦德 3050

【机试备考】Day4-二进制

题目1 大家都知道,数据在计算机里中存储是以二进制的形式存储的。 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。 题解1 仿照手算的过程写,每次将n除以2,取余数存储,最后逆序输出 #include<iostream> using namespace std; int main() { int n,a[33]={0}; w

qq_43417265的博客 455

从零开始学习CANoe(六)—— CAPL 测试节点

创建CAPL Test Module的两种方式

蚂蚁小兵 1万+

发现mysql 4.0.18 for nt 的sum函数的计算误差

发现mysql 4.0.18 for nt 的sum函数的计算误差mysql> create table ch3(ID char(32), V decimal(18,2));Query OK, 0 rows affected (0.12 sec)mysql> insert into ch3 select * from vc2;Query OK, 8192 rows affected (1.24

l1t的专栏 2808

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

mysql中统计精度问题

mysql数据统计 1在订单中计算orderPrice SELECT sum(order_price) as orderPrice,sum(price) as splitPrice FROM alipay_shop_split_record WHERE pass_status=1 AND  1512151.11  1498940.31 SELECT round(sum(order_

上官小斌的博客 5585

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

mysql sum 统计数值出现精度问题

mysql sum 累计求和精度问题

z1340954953 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MySQL函数批量建库、建表、加字段

建库函数: CREATE DEFINER=`root`@`%` PROCEDURE `createdatabases`() BEGIN DECLARE str varchar(40); DECLARE Done INT DEFAULT 0; DECLARE rs CURSOR FOR SELECT TENANTCODE FROM sys_tenant where TENANTCODE<>'incontrol'; /* 异常处理 */ DECLARE CONTINUE HANDLER FOR SQ

zh_404的博客 777

MySQL 高级开发

mysql

weixin_45782719的博客 2131

网络协议解析:Soft Parser运算符与帧属性标志实战详解

在网络数据包处理领域,协议解析是数据平面开发的核心基础。其原理在于通过解析引擎对网络比特流进行解码,提取协议头部信息,以指导后续的转发、过滤与分类决策。这一技术的核心价值在于能够高效、灵活地处理标准及自定义协议,从而满足工业自动化、车载网络等特定场景对私有协议的支持需求。在软件解析器(Soft Parser)的实现中,运算符与帧属性标志(FAF)是构建解析逻辑的关键组件。运算符如`concat`和`checksum`,负责进行精确的位级操作和校验和计算,而FAF则作为解析器的状态寄存器,用于标记数据包的协议

382

MySql数据库中确保精度问题解决方案

TRUNCATE(COLUMNAME,NUM) 截取前NUM位。前者表示字段名,后者表示保留几位小数点。 如:250.32952 是某个字段对应的值,那么用TRUNCATE后就是:250.32。 这个方法非常有用,特别是在这样的情况下:如果要求你先将某两个字段的积截取两位,然后再求和,那么这时单用sum()是不可以的! TRUNCATE(COLUMNAME1*COLUMNAME2,2)就可...

iteye_20732的博客 629

数据库时间与查询出来的时间不一致

问题:数据库的时间字段和查询出来的时间相差一天 1.看数据库链接有没有加serverTimezone url: jdbc:mysql://10.121.54.206:3306/dp?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai 2.如果数据库时间和系统时间一致,则有可能是实体类中转换的时候出问题了 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Da

weixin_51544010的博客 2135

MySQL数据库时差问题的分析与解决

MySQL数据库时差问题的分析与解决

Howinfun的博客 2391

mysql 查询数据不一致_MySQL_MySQL查询全部数据集结果不一致问题解决方案,最近出现一个很奇怪的MySQL问 - phpStudy...

MySQL查询全部数据集结果不一致问题解决方案最近出现一个很奇怪的MySQL问题,使用不同select语句查询全部数据集居然得到不同的记录数。select * 得到4条记录,select 字段得到的是3条记录。具体问题可以看下面的查询结果:[sql]mysql> select * from table_myisam;+----------+-------+-----------+------...

weixin_26789847的博客 486

MySql时间处理及interval函数运用

MySql时间操作 1.interval的说明 1.1、当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果4; 原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。 1.2、当关键词使用时,表示为设置时间间隔,常用在date_add...

weixin_44641729的博客 2万+

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 145

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 206
上一篇: spring调度器的配置 ,s2sm
下一篇: html5上传头像
Nirvana--
博客等级 码龄10年 7粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值