首页 > 其他分享 >报表查询数据异常解决方法

报表查询数据异常解决方法

时间:2024-04-29 15:46:01浏览次数:25  
标签:报表 异常 查询 计算 SQL date 数据

  缘起

    今天早上一到公司,技术支持的小伙就说一个后台报表,计算的任务完成率超过100%,有异常,客户要用,比较急,要解决这个问题。

   

  解决过程

        自从接了上任的报表计算,这个就头疼,没办法硬着头皮查什么原因,报表的SQL比较简单,一个查:接受任务数表a, 一个查:完成任务数表b

        a和b表,都是直接计算的结果表。 

        第一步: 看看是否原始查询报表的导致数据缺少,如join,left join登,去掉相关表的关联,修改join如left join,看看数据是否有变化,

          修改完,数据还是没变化,确认不是SQL关联和join表的问题

        第二步: 单独拿出执行的SQL,为了取到合适的SQL,特意开了腾讯云的云审计,查询后获取完整的SQL,单独查询“”接收任务数“和“”完成任务数”,

         单独查询查出的数据和上面的显示是一样的,看计算的存储过程,也复杂,找不到是存储过程哪错,怎么知道计算数据是错的。 怎么处理?

         这就陷入的困境,不知道计算的数据哪个是错的,可能2个多错,可能其中只有一个错的,怎么排查?这时技术支持有提示新信息,感觉这个问题必须解决。

         弄了一阵子,没有头绪,感觉就烦,这个事情也没什么意思,都是多少年前的问题还遗留到现在出现,出现抵触的心情。但是事情要解决!

         心静了一下,分析了一下,2个数据到底是哪个出现问题,还是复杂的存储过程计算逻辑有bug,先从哪里入手? 

         这些数据,就这个完成任务数据大,是否可以先查这个任务完成数据,根据常识,先暂且认为接收任务数是对的,先把完成任务完成数据排查清楚(计算清楚)

         接着就把计算完成任务数,计算SQL整理出来,使用最原始的SQL,查询出结果,发现和计算的结果不一致,结果只有7600多,少于新任务数的7700多,更是少于计算的8400多的原来结果

         这样确认了计算结果出现问题,就用原始的计算SQL,从新repalce into替换原来的老数据,查询报表发现还是有问题,原来表中有2个日期(任务日期task_date,完成日期finish_date),我只通过finish_date写入替换,历史的数据task_date的确有些数据,但是这个都是完成历史数据,和这个任务日期无关,查了一下,的确可以删除掉,执行下面SQL清理垃圾数据OK 

delete from b where task_date>='2024-04-01' and task_date <= '2024-04-28' 

        执行后,报表的完成数据已经OK

    总结 

          1,   遇事情不要急躁和退却,只会添加烦劳,对解决问题毫无帮助

          2,当不知道如何入手时,可以根据常识去判断,从最容易出错的地方入手,减少排查面

          3,使用了中间结果,可以直接用原始SQL数据查询,跳过原始的复杂计算逻辑排查

 

标签:报表,异常,查询,计算,SQL,date,数据
From: https://www.cnblogs.com/zping/p/18165657

相关文章

  • openGauss MOT查询原生编译_JIT
    MOT查询原生编译(JIT)MOT使您可以在执行之前以原生格式(使用PREPARE语句)准备并分析预编译的完整查询。这种本机格式以后可以更有效地执行(使用EXECUTE命令)。这种类型的执行效率要高得多,因为在执行期间,本机格式绕过了多个数据库处理层。这种分工避免了重复的解析分析操作。LiteExecu......
  • openGauss 查询原生编译
    查询原生编译MOT的另一个特性是,在预编译的完整查询需要执行之前,能够以原生格式(使用PREPARE语句)准备并解析这些查询。这种原生格式方便后续更有效地执行(使用EXECUTE命令)。这种执行类型速度要快得多,因为原生格式在执行期间绕过多个数据库处理层,从而获得更好地性能。这种分工避免......
  • C++ 异常处理机制详解:轻松掌握异常处理技巧
    C++异常处理C++异常处理机制允许程序在运行时处理错误或意外情况。它提供了捕获和处理错误的一种结构化方式,使程序更加健壮和可靠。异常处理的基本概念:异常:程序在运行时发生的错误或意外情况。抛出异常:使用throw关键字将异常传递给调用堆栈。捕获异常:使用try-cat......
  • fastreport .net打印普通报表
    fastreport.net打印普通报表前言:.net代码层先不记录在这,后续会单独写一篇博客来记录。直接在工具上进行功能点的实现一、效果图二、功能点分页分页小计金额大写三、功能点实现3.1分页这个直接用工具自带的page当前页和TotalPages总页数当前页和总页数是根据当前......
  • ThinkPHP6 多模型关联查询操作记录
    新入职后组长安排了一个小的管理项目来检验能力,后发现自身对于ThinkPHP框架中的模型关联属于一窍不通,故被终止项目叫楼主去恶补ThinkPHP6框架知识。对于多联表查询之前本人一直使用join方法,但是此方法对于代码效率和维护都有较大影响,故在此尝试使用ThinkPHP框架内置的模型......
  • 什么是SQL 语句中相关子查询与非相关子查询
    1.什么是SQL子查询要理解相关子查询和非相关子查询,我们得首先理解什么是子查询,子查询是指在一个查询语句中嵌套的另一个查询语句。子查询可以嵌套在其他查询语句中,如SELECT、INSERT、UPDATE、DELETE等,它作为一个独立的查询单元,其结果可以被外部查询所使用。子查询可以帮助我......
  • 微服务调用form-data 流文件异常
    Noserializerfoundforclassjava.io.FileDescriptorandnopropertiesdiscoveredtocreateBeanSerializer(toavoidexception,disableSerializationFeature.FAIL_ON_EMPTY_BEANS)(throughreferencechain:com.cloud.module.smartkey.dto.UploadParam["upl......
  • 无需重新学习,使用 Kibana 查询/可视化 SLS 数据
    作者:荆磊场景现在通过SLS的ES兼容能力,可以很方便地实现用Kibana来查询和可视化SLS的数据。对于从ES迁移到SLS的用户可以继续保留原来的Kibana使用习惯。下面来演示如何通过Kibana来访问SLS。使用方法部署架构这里蓝色部分是需要客户端部署的组件。Kibana......
  • sqlserver sp_who2和inputbuffer的使用,如何查询进程执行的脚本代码【转】
    一、sp_who2的使用1、存储过程的位置 sp_who官方解释地址:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-who-transact-sql?redirectedfrom=MSDN&view=sql-server-2017 2、查出的列名的含义CPUTime: 进程占用的......
  • mongodb异机做时间点恢复(基于时间范围查询导出oplog)
    环境:OS:Centos7DB:mongodb5原环境:1主2从,异机恢复的环境:单机(oplog.rs是否开启都可以,开启可以参考:https://www.cnblogs.com/hxlasky/p/17979922) 1.模拟写入数据连接主库模拟写入数据/usr/local/services/mongodb/bin/mongo192.168.56.101:29001useadmindb.auth("......