公式:环比增长率=(当月数据-上月数据)/上月数据

第一步首先统计出某年12个月+上年最后一个月份的数据,sql如下:

  SELECTa.`month` AS `month`,ifnull( b.winOrderNum, 0 ) as winOrderNum,ifnull( b.winOrderAmt, '0.00' ) as winOrderAmtFROM(SELECTCONCAT(#{date}-1,'-12') AS `month` UNIONSELECTCONCAT(#{date},'-01') AS `month` UNIONSELECTCONCAT(#{date},'-02') AS `month` UNIONSELECTCONCAT(#{date},'-03') AS `month` UNIONSELECTCONCAT(#{date},'-04') AS `month` UNIONSELECTCONCAT(#{date},'-05') AS `month` UNIONSELECTCONCAT(#{date},'-06') AS `month` UNIONSELECTCONCAT(#{date},'-07') AS `month` UNIONSELECTCONCAT(#{date},'-08') AS `month` UNIONSELECTCONCAT(#{date},'-09') AS `month` UNIONSELECTCONCAT(#{date},'-10') AS `month` UNIONSELECTCONCAT(#{date},'-11') AS `month` UNIONSELECTCONCAT( #{date},'-12') AS `month`) aLEFT JOIN (SELECTfrom_unixtime( tc.create_time / 1000, '%m' ) AS `month`,count(tc.id) as winOrderNum,CAST( IFNULL( sum( tc.amount ), 0 ) / 100 AS DECIMAL ( 20, 2 ) ) AS winOrderAmtFROMtrade_contract tcWHEREfrom_unixtime( tc.create_time / 1000, '%Y' ) = #{date}and tc.opportunity_id is not nullGROUP BY`month`) b ON a.`month` = b.`month`

第二步java处理环比增长:list为条件查询出的集合

需要注意的点:

1. 将查询的数据放到map<String,Object>对象中,通过key(月份)获取相应的数据

2. 获取当前时间的上个月日期

3. 通过给定的公式计算环比增长

这些都在for循环中处理完成


//定义map集合Map<String, ContractReportDTO> map = list.stream().collect(Collectors.toMap(ContractReportDTO::getMonth, Function.identity()));list.stream().forEach(entity -> {ContractReportDTO lastContractReportDTO = map.get(DateUtils.getPreMonth(entity.getMonth()));if (null == lastContractReportDTO) {entity.setNumRate("0");entity.setAmtRate("0");} else {//获取上月份的赢单数Integer winOrderNumLast = lastContractReportDTO.getWinOrderNum();if (winOrderNumLast == 0) {entity.setNumRate("0");} else {//赢单数环比增长率=(当月数据-上月数据)/上月数据BigDecimal numRate = new BigDecimal(0);numRate = new BigDecimal(entity.getWinOrderNum()).subtract(new BigDecimal(winOrderNumLast)).divide(new BigDecimal(winOrderNumLast)).setScale(1, RoundingMode.HALF_UP);entity.setNumRate(numRate.toString());}//获取上月份的赢单金额String winOrderAmtLast = lastContractReportDTO.getWinOrderAmt();if ("0.00".equals(winOrderAmtLast)) {entity.setAmtRate("0");} else {//赢单金额环比增长率BigDecimal amtRate = new BigDecimal(0);amtRate = new BigDecimal(entity.getWinOrderAmt()).subtract(new BigDecimal(winOrderAmtLast)).divide(new BigDecimal(winOrderAmtLast)).setScale(1, RoundingMode.HALF_UP);entity.setAmtRate(amtRate.toString());}}});list.remove(0);

获取当前时间的上个月日期方法这里也一并提供下:

 /*** 获取指定月份的上一月日期*/public static String getPreMonth(String month) {try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");return sdf.format(org.apache.commons.lang.time.DateUtils.addMonths(sdf.parse(month), -1));} catch (Exception e) {e.printStackTrace();}return "";}

java处理环比增长率相关推荐

  1. python如何计算环比增长率

    CDA数据分析师 出品 认识环比增长率 很多企业比较注重自己的业务增长情况,时常会需要计算同比增长率和环比增长率.从上学的时候就有很多小伙伴搞不清楚这两个增长率之间的区别,这里简单直白的解释一下: 同 ...

  2. java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结

    /************************************************************************/ /*                  Josep ...

  3. Java IM环信服务端集成之用户注册(三)

    移动端用户注册 VS 环信IM 用户注册 一.IM 用户管理 注册 IM 用户[单个] 在 URL 指定的 org 和 APP 中创建一个新的用户,分两种模式:开放注册和授权注册. "开放注 ...

  4. Java 约瑟夫环(循环链表解决)

    问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉.例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1. 解题思路:因为是围成一圈,所以用循环链表是最符 ...

  5. java约瑟夫环 循环链表_约瑟夫环_循环链表JAVA解答

    编写测试案例 public class Cicle { @Test public void test() { LinkedList linkedList = new LinkedList(); lin ...

  6. mac怎么装java eclipse_如何在Mac系统安装eclipse并运行java程序

    展开全部 Mac系统安装eclipse并运行java程序具体操作步骤如下:安装Eclipse前先确认你的Mac上是否已安装java运行环e69da5e6ba9062616964757a68696461 ...

  7. Power BI中计算同比、环比

    财务需求中经常要求计算数据的同比.环比,下面介绍如何在Power BI 中创建用来计算同比和环比的度量值(SSAS模型中同理)... 现金表中有金额,时间(时间需要连续的年月日格式),计算同比.环比. ...

  8. ORACLE——一条SQL计算同比、环比

    按照月份进行计算: SELECT D.YEARMONTH, D.VALUE, TO_CHAR(NVL(ROUND(DECODE(D.monthOnMonth,0,NULL,(D.VALUE - D.m ...

  9. Powerbi环比分析及其修正

    Powerbi环比分析及其修正 (以分析利润表环比年增长率为例) 一.建立环比增长率度量值 新建快速度量值(见下图) [计算]选择"年增长率变化" [基值]从字段里选入利润表的金额 ...

  10. Visual Age for Java_VisualAge for Java使用技巧

    VisualAge for Java使用技巧 杨 旭 青 IBM 的VisualAge for Java 是 一 个 功 能 强 大. 灵 活 的Java 编程 环 境, 本 文 介 绍 几 个 与 ...

最新文章

  1. 基于长短读长和参考基因组的组装错误检测算法的研究
  2. 利用select实现年月日三级联动的日期选择效果
  3. Centos 7 添加新磁盘
  4. 【opencv】22.HOG的原理与详细步骤
  5. Zabbix学习之路(一)之Zabbix安装
  6. CodeForces - 1426F Number of Subsequences(dp)
  7. svn安装教程 mysql_CentOS6.4 下安装SVN的详细教程(超详细)
  8. SVN中Revert changes from this revision 跟Revert to this revision
  9. MyBatis-Plus_AR 模式
  10. Android系统移植与调试之-------Amlogic方案编译步骤
  11. Selenium alert 弹窗处理
  12. 前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
  13. 官网下载到离线的Adobe Acrobat Reader DC
  14. 锐捷NAT地址池配置
  15. 本地传奇架设详细教程
  16. Android 扫码枪 读取(外接键盘读取)
  17. Ubuntu安装NVIDIA独立显卡驱动出现X service error问题解决方法
  18. 制作Unity的二维时间轴编辑器界面
  19. COGS 613 火车站饭店
  20. java游戏 亚瑟,王者荣耀:纯肉流亚瑟终于火了!玩家历时两个月研发亚瑟终极肉装...

热门文章

  1. Android面试准备复习之Android知识点大扫描 .
  2. 插件效果【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件
  3. 计算机阵列除法器原理,并行除法器 ,并行除法器结构原理是什么?
  4. 论文参考文献正确插入方法 (一)
  5. ROS中关于yaml文件参数的读取,和nh.param函数
  6. 方法重载和重写的区别
  7. excel数据导入matlab失败,Excel数据导入matlab
  8. html如何发送语音,浏览器实现HTML5发送语音功能
  9. fid和is_【深度学习】生成式对抗网络(GAN)的常见评价指标:IS/FID/JS散度
  10. 特种劳动防护用品安全标志证书