java处理环比增长率
公式:环比增长率=(当月数据-上月数据)/上月数据
第一步首先统计出某年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处理环比增长率相关推荐
- python如何计算环比增长率
CDA数据分析师 出品 认识环比增长率 很多企业比较注重自己的业务增长情况,时常会需要计算同比增长率和环比增长率.从上学的时候就有很多小伙伴搞不清楚这两个增长率之间的区别,这里简单直白的解释一下: 同 ...
- java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结
/************************************************************************/ /* Josep ...
- Java IM环信服务端集成之用户注册(三)
移动端用户注册 VS 环信IM 用户注册 一.IM 用户管理 注册 IM 用户[单个] 在 URL 指定的 org 和 APP 中创建一个新的用户,分两种模式:开放注册和授权注册. "开放注 ...
- Java 约瑟夫环(循环链表解决)
问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉.例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1. 解题思路:因为是围成一圈,所以用循环链表是最符 ...
- java约瑟夫环 循环链表_约瑟夫环_循环链表JAVA解答
编写测试案例 public class Cicle { @Test public void test() { LinkedList linkedList = new LinkedList(); lin ...
- mac怎么装java eclipse_如何在Mac系统安装eclipse并运行java程序
展开全部 Mac系统安装eclipse并运行java程序具体操作步骤如下:安装Eclipse前先确认你的Mac上是否已安装java运行环e69da5e6ba9062616964757a68696461 ...
- Power BI中计算同比、环比
财务需求中经常要求计算数据的同比.环比,下面介绍如何在Power BI 中创建用来计算同比和环比的度量值(SSAS模型中同理)... 现金表中有金额,时间(时间需要连续的年月日格式),计算同比.环比. ...
- ORACLE——一条SQL计算同比、环比
按照月份进行计算: SELECT D.YEARMONTH, D.VALUE, TO_CHAR(NVL(ROUND(DECODE(D.monthOnMonth,0,NULL,(D.VALUE - D.m ...
- Powerbi环比分析及其修正
Powerbi环比分析及其修正 (以分析利润表环比年增长率为例) 一.建立环比增长率度量值 新建快速度量值(见下图) [计算]选择"年增长率变化" [基值]从字段里选入利润表的金额 ...
- Visual Age for Java_VisualAge for Java使用技巧
VisualAge for Java使用技巧 杨 旭 青 IBM 的VisualAge for Java 是 一 个 功 能 强 大. 灵 活 的Java 编程 环 境, 本 文 介 绍 几 个 与 ...
最新文章
- 基于长短读长和参考基因组的组装错误检测算法的研究
- 利用select实现年月日三级联动的日期选择效果
- Centos 7 添加新磁盘
- 【opencv】22.HOG的原理与详细步骤
- Zabbix学习之路(一)之Zabbix安装
- CodeForces - 1426F Number of Subsequences(dp)
- svn安装教程 mysql_CentOS6.4 下安装SVN的详细教程(超详细)
- SVN中Revert changes from this revision 跟Revert to this revision
- MyBatis-Plus_AR 模式
- Android系统移植与调试之-------Amlogic方案编译步骤
- Selenium alert 弹窗处理
- 前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
- 官网下载到离线的Adobe Acrobat Reader DC
- 锐捷NAT地址池配置
- 本地传奇架设详细教程
- Android 扫码枪 读取(外接键盘读取)
- Ubuntu安装NVIDIA独立显卡驱动出现X service error问题解决方法
- 制作Unity的二维时间轴编辑器界面
- COGS 613 火车站饭店
- java游戏 亚瑟,王者荣耀:纯肉流亚瑟终于火了!玩家历时两个月研发亚瑟终极肉装...
热门文章
- Android面试准备复习之Android知识点大扫描 .
- 插件效果【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件
- 计算机阵列除法器原理,并行除法器 ,并行除法器结构原理是什么?
- 论文参考文献正确插入方法 (一)
- ROS中关于yaml文件参数的读取,和nh.param函数
- 方法重载和重写的区别
- excel数据导入matlab失败,Excel数据导入matlab
- html如何发送语音,浏览器实现HTML5发送语音功能
- fid和is_【深度学习】生成式对抗网络(GAN)的常见评价指标:IS/FID/JS散度
- 特种劳动防护用品安全标志证书