需求:计算指定客户当前季度项目数量比上月变化了多少
即:计算当前季度项目量 减去 上一季度项目量
开始想使用java代码计算出对应时间,在通过时间段查询,但感觉这样有点麻烦,便网上查了下mysql有没有对应的方法直接查出来,但查询之后发现了一些函数是可以使用的,但是有不足的地方,便在基础上改进了一下
参考文章:
https://blog.csdn.net/roc_wl/article/details/100076667
对应函数:
-- 得到上一季度
DATE_SUB(CURDATE(),interval 1 QUARTER)
注意:
如果当前日期为1季度,则减一季度后,结果为4季度
直接使用以上函数进行判断出现的问题
- 不同年份的数据会被一起查出
- 如果当前为第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 版权协议,转载请附上原文出处链接和本声明。