使用mysql日期函数查询上季度数据

  • Post author:
  • Post category:mysql




需求:计算指定客户当前季度项目数量比上月变化了多少

即:计算当前季度项目量 减去 上一季度项目量

开始想使用java代码计算出对应时间,在通过时间段查询,但感觉这样有点麻烦,便网上查了下mysql有没有对应的方法直接查出来,但查询之后发现了一些函数是可以使用的,但是有不足的地方,便在基础上改进了一下

参考文章:

https://blog.csdn.net/roc_wl/article/details/100076667



对应函数:

在这里插入图片描述

-- 得到上一季度
DATE_SUB(CURDATE(),interval 1 QUARTER)


注意:

如果当前日期为1季度,则减一季度后,结果为4季度



直接使用以上函数进行判断出现的问题

  1. 不同年份的数据会被一起查出
  2. 如果当前为第1季度,查出的数据是当前年的最后一个季度的数据



为解决此问题,引入了year()函数,对年进行判断,结果如下

-- 当前季度项目数
SELECT COUNT(*) FROM project as t1 
WHERE YEAR(t1.create_time) = YEAR(CURDATE()) -- 今年
and QUARTER(t1.create_time) = QUARTER(CURDATE()) -- 当前季度 

-- 上一季度项目数
SELECT COUNT(*) FROM project as t1 
WHERE YEAR(t1.create_time) = IF(QUARTER(CURDATE()) = 1,YEAR(CURDATE()) -1,YEAR(CURDATE())) -- 年:如果当前季度为1季度,则年份减1
and QUARTER(t1.create_time)=QUARTER(DATE_SUB(CURDATE(),interval 1 QUARTER)) -- 上一季度
-- 两季度差
SELECT 
(
-- 当前季度项目数
SELECT COUNT(*) FROM project as t1 
WHERE YEAR(t1.create_time) = YEAR(CURDATE()) -- 今年
and QUARTER(t1.create_time) = QUARTER(CURDATE()) -- 当前季度
)
-
(
-- 上一季度项目数
SELECT count(*) FROM project as t1 
WHERE YEAR(t1.create_time) = IF(QUARTER(CURDATE()) = 1,YEAR(CURDATE()) -1,YEAR(CURDATE())) -- 年
and QUARTER(t1.create_time)=QUARTER(DATE_SUB(CURDATE(),interval 1 QUARTER)) -- 上一季度
)



版权声明:本文为weixin_44684303原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。