当前位置: 首页 > news >正文

Mysql 当前月每天累计统计,Mysql 本月第一天

==============================

©Copyright 蕃薯耀 2022-11-10

蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主

一、Mysql 本月第一天,Mysql 当前月第一天

-- 本月第一天
SELECT DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY);

-- 本月第一天
SELECT CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m'), '-01');

二、Mysql 当前月每天累计统计

示例效果(ProductMeteAddUp为每天累计的数量):

Name          CreateTime  ProductMete     ProductMeteAddUp  
------------  ----------  --------------  ------------------
重钢二线       2022-11-07  0.00000000      0.00000000        
重钢二线       2022-11-08  13887.50000000  13887.50000000    
重钢二线       2022-11-09  5212.90000000   19100.40000000 

1、方式一:mysql8.0及以上版本可用

#当月每天累计统计(mysql8.0及以上版本可用)
#方式一:
#优点:标准,使用系统函数,无重复过滤条件
#缺点:mysql8.0及以上版本可用
SELECT `Name`,DATE(CreateTime) CreateTime,ProductMete,
SUM(ProductMete) OVER(ORDER BY CreateTime) AS ProductMeteAddUp
FROM Product_Daily
WHERE 1=1
AND NAME ='重钢二线'
AND CreateTime > DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY)
ORDER BY CreateTime ASC;

2、方式二:子查询 [各版本通用]

#当月每天累计统计(子查询[各版本通用])
#方式二:
#优点:容易理解
#缺点:子查询存在重复的过滤条件
SELECT `Name`,DATE(CreateTime) CreateTime,ProductMete,
(
	SELECT SUM(p2.ProductMete) 
	FROM Product_Daily p2 
	WHERE 1=1 
	AND p2.Name ='重钢二线'
	AND p2.CreateTime > DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY)
	AND DATE(p2.CreateTime) <= DATE(p1.CreateTime)

) AS ProductMeteAddUp
FROM Product_Daily p1
WHERE 1=1
AND p1.Name ='重钢二线'
AND p1.CreateTime > DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY)
ORDER BY CreateTime ASC;

方式三:自定义变量实现

#当月每天累计统计(通过自定义变量实现)
#方式三:
#优点:代码简单,无重复过滤条件
#缺点:临时变量,不容易理解
SELECT `Name`,DATE(CreateTime) CreateTime,ProductMete,
@ProductMeteAddUp := @ProductMeteAddUp + ProductMete AS ProductMeteAddUp
FROM Product_Daily,(SELECT @ProductMeteAddUp := 0) temp
WHERE 1=1
AND `Name` ='重钢二线'
AND CreateTime > DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY)
ORDER BY CreateTime ASC;

三、Mysql统计每月1号到当前日期的累计数据,自动补充无数据的日期

#当月每天累计统计(通过自定义变量实现),自动补充无数据的日期
SELECT tt.* 
,IFNULL(l.ProductMete, 0) ProductMete
,IFNULL(l.ProductMeteAddUp, 0) ProductMeteAddUp
FROM (
	SELECT
	@date := DATE_ADD(@date, INTERVAL + 1 DAY) `Date`
	FROM
	(
		SELECT @date := DATE_ADD(CURDATE(), INTERVAL - DAY(CURDATE())  DAY)
		FROM sys_date
	) TIME
	WHERE @date < CURDATE()
) tt
LEFT JOIN (
	SELECT DATE(CreateTime) CreateTime,ROUND(ProductMete / 1000, 1) AS ProductMete,
	ROUND(@ProductMeteAddUp := @ProductMeteAddUp + ProductMete / 1000, 1) AS ProductMeteAddUp
	FROM Product_Daily,(SELECT @ProductMeteAddUp := 0) temp
	WHERE 1=1
	AND `Name` ='重钢二线'
	AND CreateTime > DATE_ADD(CURDATE(), INTERVAL -DAY(CURDATE()) + 1 DAY)
	ORDER BY CreateTime ASC
) l ON l.CreateTime = tt.date
ORDER BY tt.Date
;

示例结果:

Date        ProductMete  ProductMeteAddUp  
----------  -----------  ------------------
2022-11-01  0.0          0.0               
2022-11-02  0.0          0.0               
2022-11-03  0.0          0.0               
2022-11-04  0.0          0.0               
2022-11-05  0.0          0.0               
2022-11-06  0.0          0.0               
2022-11-07  0.0          0.0               
2022-11-08  13.9         13.9              
2022-11-09  5.2          19.1              
2022-11-10  0.0          19.1

 ==============================

©Copyright 蕃薯耀 2022-11-10

蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主

相关文章:

  • 第一个发布成功的UI组件库
  • 【python】点燃我,温暖你 ,快来Get同款~
  • Flutter:webview_flutter插件使用
  • 学习python第6天
  • [附源码]计算机毕业设计JAVAjsp求职招聘平台开发
  • C++ opencv 图像像素的逻辑操作
  • 【Revit二次开发】模型中存储数据——参数和外部存储(Parameter, Schema and Entity)
  • 基于粒子群优化和模拟退火算法增强传统聚类研究(Matlab代码实现)
  • 前端经典面试题 | 性能优化之图片优化
  • 这些包括我在内都有的Python编程陋习,趁早改掉
  • 基于FPGA的数据采集系统
  • 10道不得不会的 Java容器 面试题
  • CPU的睿频、超线程、SIMD指令集等特性对密码算法性能的影响
  • python基于PHP+MySQL的论坛管理系统
  • 修改寄存器值的方法
  • 网络工具Netwox和Wireshark详解
  • Linux如何写C语言
  • PyTorch1.13 亮点一览,TorchEval、MultiPy 、TorchSnapshot 新库大解读
  • VCS工具学习笔记(3)
  • 初识C++(三)
  • 李在明回应韩国大法院判决:与自己所想截然不同,将顺从民意
  • 王毅谈金砖国家开展斡旋调解的经验和独特优势
  • 光明日报社论:用你我的匠心,托举起繁盛的中国
  • 辽宁辽阳火灾3名伤者无生命危险
  • 中国人保聘任田耕为副总裁,此前为工行浙江省分行行长
  • 探索演艺产业新路径,2万观众走进音乐科技融创节