MySQL实践之同比环比
2017-05-23 09:43
731 查看
SET global sql_mode=''; SET session sql_mode=''; SET @startDay = '2016-01-01'; SET @endDay = '2017-04-01'; SELECT tbl.YearMonth, -- 年月 tbl.t1 AS Amount, -- 当期金额 CASE WHEN t2 = 0 OR t2 IS NULL THEN 0.00 ELSE ((t1-t2) / t2) * 100 END AS ProportionH, -- 环比 CASE WHEN t3 = 0 OR t3 IS NULL THEN 0.00 ELSE ((t1-t3) / t3) * 100 END AS ProportionT -- 同比 FROM ( SELECT DATE_FORMAT(b1.BIDate,'%Y-%m') AS YearMonth, SUM(a1.SaleAmt) AS t1, -- 当期金额 ( SELECT CASE WHEN a2.SaleAmt = 0 OR a2.SaleAmt IS NULL THEN 0.00 ELSE SUM(a2.SaleAmt) END FROM fact_sumday AS a2 INNER JOIN dim_bidate AS b2 ON a2.BIDateId = b2.BIDateId WHERE DATE_FORMAT(b1.BIDate,'%Y-%m') = DATE_FORMAT(DATE_ADD(b2.BIDate,INTERVAL 1 MONTH),'%Y-%m') -- 表的自连接实现 ) AS t2, -- 环期金额 ( SELECT CASE WHEN a3.SaleAmt = 0 OR a3.SaleAmt IS NULL THEN 0.00 ELSE SUM(a3.SaleAmt) END FROM fact_sumday AS a3 INNER JOIN dim_bidate AS b3 ON a3.BIDateId = b3.BIDateId WHERE DATE_FORMAT(b1.BIDate,'%Y-%m') = DATE_FORMAT(DATE_ADD(b3.BIDate,INTERVAL 1 YEAR),'%Y-%m') -- 表的自连接实现 ) AS t3 -- 同期金额 FROM fact_sumday AS a1 INNER JOIN dim_bidate AS b1 ON a1.BIDateId = b1.BIDateId GROUP BY 1 ) AS tbl WHERE tbl.YearMonth BETWEEN DATE_FORMAT(@startDay,'%Y-%m') AND DATE_FORMAT(@endDay,'%Y-%m');
相关文章推荐
- MySQL + mybatis 查询业务月统计 包括 同比 环比
- MySQL统计同比环比SQL
- 什么是同比、环比与定基比
- 用源码包安装php-4.34+mysql-4.0.16+apache-2.0.48+vbb-2.32实践总结
- 同比及环比的KPI使用
- MDX实现同比和环比
- MYSQL集群探索与实践
- Ruby实践—连接Mysql
- 实践经验汇集成的MySQL应用指南
- 同比环比(案例)
- JBoss JBPM 实践系列(一)--- 安装配置(Tomcat 6.0 + MySQL 5.1)
- 浅析“同比”与“环比”
- 同比,环比
- 用MDX进行同比及环比计算(转)
- 用MDX进行同比及环比计算
- 实践MySQL(mysqld)多实例/多版本同时运行
- 2006-5-9 从 MySql 导出数据到 Access中——实践小结 By Stabx
- 如何使用MDX编写同比和环比
- JBoss JBPM 实践系列(一)--- 安装配置(Tomcat 6.0 + MySQL 5.1)
- SQL Server 2008 Analysis Services(OLAP) - 环比、同比