目录

1 所需基础日期查询实现

2 根据业务表实际查询操作

2.1 简单查询

2.2 查询优化:

2.3  在mybatis中 查询,关联业务信息实现


1 所需基础日期查询实现

(1)在计算同比环比时需要用到本日、本月1日、上月本日、上月1日,年初 及去年对应的时间

select
CURDATE() as cur_day,
DATE_FORMAT(CURDATE(),'%Y-%m-01') as cur_month_first_day,
DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY) as cur_year_first_day,
DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m-01') as last_month_first_day,
DATE_SUB(CURDATE(),INTERVAL 1 MONTH) as last_month_cur_day,DATE_SUB(CURDATE(),INTERVAL 1 YEAR) as last_year_cur_day,
DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 YEAR),'%Y-%m-01') as last_year_cur_month_first_day,
DATE_SUB(DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY),INTERVAL 1 YEAR) as last_year_first_day,
DATE_SUB(DATE_SUB(CURDATE(),INTERVAL 1 MONTH), INTERVAL 1 YEAR) as last_year_last_month_cur_day,
DATE_FORMAT(DATE_SUB(DATE_SUB(CURDATE(),INTERVAL 1 MONTH), INTERVAL 1 YEAR),'%Y-%m-01') as last_year_last_month_first_day

(2)本周一、本周日、上周一、上周日

select
subdate(curdate(),date_format(curdate(),'%w')-1) as thisWeekMonday,
subdate(curdate(),date_format(curdate(),'%w')-7) as thisWeekSunday,
subdate((subdate(curdate(),7)), date_format(subdate(curdate(),7),'%w')-1) as lastWeekMonday,
subdate((subdate(curdate(),7)), date_format(subdate(curdate(),7),'%w')-7) as lastWeekSunday

2 根据业务表实际查询操作

2.1 简单查询

示例:客流统计

select -- 日数据
(
-- DATE_FORMAT(CURDATE(),'%Y-%m-%d') as data_time, entity_code,entity_name,
select sum(counts) as count from sta_passenger_analysis where DATE_FORMAT(data_time,'%Y-%m-%d')= DATE_FORMAT(CURDATE(),'%Y-%m-%d')
) as cur_day_count,
-- 上月本日数据
(
-- DATE_SUB(CURDATE(),INTERVAL 1 MONTH) as data_time,entity_code,entity_name,
select sum(counts) as count from sta_passenger_analysis where DATE_FORMAT(data_time,'%Y-%m-%d')= DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m-%d')
) as last_month_cur_day_count,
-- 去年本日数据
(
-- DATE_SUB(CURDATE(),INTERVAL 1 YEAR) as data_time,entity_code,entity_name,
select sum(counts) as count from sta_passenger_analysis where DATE_FORMAT(data_time,'%Y-%m-%d')= DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 YEAR),'%Y-%m-%d')
) as last_year_cur_day_count,-- 本月累计(
select sum(counts) as count from sta_passenger_analysis
where 1=1
AND DATE_FORMAT(data_time,'%Y-%m-%d')<= DATE_FORMAT(CURDATE(),'%Y-%m-%d')
AND DATE_FORMAT(data_time,'%Y-%m-%d')>=DATE_FORMAT(CURDATE(),'%Y-%m-01')
) as cur_month_month_count,
-- 上月累计
(
select sum(counts) as count from sta_passenger_analysis
where 1=1
AND DATE_FORMAT(data_time,'%Y-%m-%d')<= DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m-%d')
AND DATE_FORMAT(data_time,'%Y-%m-%d')>=DATE_FORMAT(DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m-01'),'%Y-%m-01')
) as last_month_month_count,-- 去年本月累计
(
select sum(counts) as count from sta_passenger_analysis
where 1=1
AND DATE_FORMAT(data_time,'%Y-%m-%d')<= DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 YEAR),'%Y-%m-%d')
AND DATE_FORMAT(data_time,'%Y-%m-%d')>=DATE_FORMAT(DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 YEAr),'%Y-%m-01'),'%Y-%m-01')
) as last_year_cur_month_month_count,-- 今年累计数据
(
select sum(counts) as count from sta_passenger_analysis
where 1=1
AND DATE_FORMAT(data_time,'%Y-%m-%d')<= DATE_FORMAT(CURDATE(),'%Y-%m-%d')
AND DATE_FORMAT(data_time,'%Y-%m-%d')>=DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY),'%Y-%m-01')
) as cur_year_year_count,-- 去年累计数据
(
select sum(counts) as count from sta_passenger_analysis
where 1=1
AND DATE_FORMAT(data_time,'%Y-%m-%d')<= DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 YEAR) ,'%Y-%m-%d')
AND DATE_FORMAT(data_time,'%Y-%m-%d')>=DATE_FORMAT(DATE_SUB(DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY),INTERVAL 1 YEAR),'%Y-%m-01')
) as last_year_year_count

2.2 查询优化:

对表名提取,先做一次过滤后查询(过滤无效)

2.3  在mybatis中 查询,关联业务信息实现

mybatis xml中不支持小于号,需使用  <![CDATA[ **** ]]>  将小于的比较判断包含在[]内

增长比例在此未计算,可在前端根据数据自行计算

同比环比日期计算、本周一、本周日、上周一、上周日(mysql)相关推荐

  1. php获取当前周得周一_php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期...

    //本周一 echo date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); //w为星期几的数字形 ...

  2. php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期

    <?php //本周一 echo date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); // ...

  3. php时间计算,计算本周一或周日,上周一或周日,下周一

    if(!empty($_GET['monday'])){ $now_time = $_GET['monday']; $time = strtotime($now_time); //获取计算周的周一 $ ...

  4. mysql实现同比环比的计算

    同比: select t5.m,FORMAT(((t5.newhan-t5.oldhan)/t5.oldhan)*100,2) from ( select t3.month as m,t3.avg_h ...

  5. 数仓工具—Hive实战之占比同比环比(10)

    同比环比的计算 测试数据 1,2020-04-20,420 2,2020-04-04,800 3,2020-03-28,500 4,2020-03-13,100 5,2020-02-27,300 6, ...

  6. Oracle如何根据一个日期计算同比环比的日期

    iamlaosong文 在写统计查询的SQL语句时,经常会碰到根据一个查询日期推演其它日期的问题,如同比.环比等. 1.字符串转换成日期:to_date('2016-6-16', 'yyyy-mm-d ...

  7. MySql按周,按月,按日分组统计数据、日期计算。并统计环比、同比

    MySql按周,按月,按日分组统计数据 <!-- 按日查询 --> SELECT DATE_FORMAT(created_date,'%Y-%m-%d') as time,sum(mone ...

  8. 【Mysql实战】使用存储过程和计算同比环比

    背景 同环比,是基本的数据分析方法.在各类调研表中屡见不鲜,如果人工向前追溯统计数据,可想而知工作量是非常大的. 标题复制10行,并且每行大于10个字符[源码解析]SpringBoot接口参数[Mys ...

  9. java时间计算同比环比周的问题

    问题描述: 在业务中会有传不同日期格式, 1.有天(2020-02-29),周(2020-03第三周),月(2020-02二月份), 2.同时需要计算对应的去年同比时间和环比(就是上一个时间段,周的2 ...

最新文章

  1. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 4. 二分类线性判别分析
  2. 一图看清全球270家典型区块链服务商
  3. Python的进度条的制作
  4. 这可能是人工智能、机器学习和大数据领域覆盖最全的一份速查表
  5. XGB的python实现
  6. jQuery导航菜单防刷新
  7. Jinja2学习笔记暨官方文档的翻译 -- 转载
  8. 50 招教你防止黑客入侵,适用于入门小白到专业人员
  9. 电影'社交网络'获金球奖最佳影片,最佳编剧,最佳导演,最佳配乐奖
  10. SpringBoot 整合 liquibase
  11. 《3ds Max疯狂设计学院》——1.7节学习3ds Max的基本流程,必须要在最开始就了解...
  12. 【软考软件评测师】2016综合知识历年真题
  13. 通过AndroidStudio找到数据库文件
  14. web前端简历怎么写?
  15. [转载]document.readyState
  16. 学python千万别想当然
  17. 百篇已过,又是一个新篇章,谈谈感受吧
  18. 前端vue点击切换(黑夜/白天模式)主题最新(源码)
  19. C++——m个月饼分给n个人
  20. 非递归、递归遍历二叉树!

热门文章

  1. inc fun funadmin.php,织梦安装百度编辑器
  2. 机器学习斯坦福公开课学习笔记
  3. 全球及中国小型发动机催化剂行业竞争格局及前景趋势预测报告(2022-2027)
  4. php调用python程序
  5. 解决虚拟主机空间商禁用fsockopen函数
  6. SLAMTEC-思岚科技CSO林凌受邀参上海交大“慧谷”创新创业训练营仪式
  7. 360手机打开位置服务器,怎么用360手机卫士定位别人手机位置
  8. 有道词典之父:曾梦想执笔去教书,却转岗当上CEO
  9. Hypersonic SQL-miniDB
  10. 设计模式-对象池技术