某水表量每15分钟一报,然后某天示数清0了,重新报示值了 ,如何写sql 计算每日水量
要计算每日电量,需处理电表清零的情况。以下是针对不同数据库的解决方案:
方法思路
- 识别清零点:通过比较当前值与前一个值,若当前值明显变小(如小于前值的10%),则视为清零。
- 分段累计:将数据按清零点分段,每段单独累计电量。
- 每日汇总:按日期分组,累加每日各段的电量总和。
SQL 实现(以 MySQL 为例)
WITH RECURSIVE
-- 1. 添加行号和前一个值
t1 AS (SELECT`timestamp`,value,ROW_NUMBER() OVER (ORDER BY `timestamp`) AS rn,LAG(value) OVER (ORDER BY `timestamp`) AS prev_valueFROM meter_data
),
-- 2. 标记清零点(当前值 < 前值的10%)
t2 AS (SELECT`timestamp`,value,rn,prev_value,CASE WHEN prev_value IS NOT NULL AND value < prev_value * 0.1 THEN 1 ELSE 0 END AS is_resetFROM t1
),
-- 3. 为每个清零点分配组ID(使用递归CTE)
t3 AS (SELECT`timestamp`,value,rn,is_reset,rn AS group_idFROM t2WHERE rn = 1UNION ALLSELECTt2.`timestamp`,t2.value,t2.rn,t2.is_reset,CASE WHEN t2.is_reset = 1 THEN t2.rn ELSE t3.group_id ENDFROM t2JOIN t3 ON t2.rn = t3.rn + 1
),
-- 4. 计算每组的增量并累加
t4 AS (SELECT`timestamp`,DATE(`timestamp`) AS date,value,group_id,value - LAG(value, 1, value) OVER (PARTITION BY group_id ORDER BY `timestamp`) AS incrementFROM t3
)
-- 5. 按日期汇总电量(忽略负值,可能是异常或清零残留)
SELECTdate,SUM(CASE WHEN increment >= 0 THEN increment ELSE 0 END) AS daily_energy
FROM t4
GROUP BY date
ORDER BY date;
其他数据库适配
- PostgreSQL:与 MySQL 类似,但递归 CTE 语法更简洁:
WITH RECURSIVE t3 AS (...)
- SQL Server:使用
ISNULL
替代COALESCE
,窗口函数语法相同。 - Oracle:使用
CONNECT BY
替代递归 CTE,或用MATCH_RECOGNIZE
简化模式匹配。
关键点说明
- 清零判断:
value < prev_value * 0.1
可根据实际情况调整阈值。 - 分组逻辑:通过递归 CTE 为每个清零点分配新的
group_id
。 - 处理异常值:
SUM(CASE WHEN increment >= 0 ...)
过滤可能的负值(如清零残留)。
示例数据验证
假设有以下数据(每15分钟记录一次):
timestamp | value |
---|---|
2023-01-01 00:00:00 | 100 |
2023-01-01 00:15:00 | 110 |
2023-01-01 23:45:00 | 900 |
2023-01-02 00:00:00 | 50 |
2023-01-02 23:45:00 | 800 |
计算结果:
date | daily_energy |
---|---|
2023-01-01 | 800 |
2023-01-02 | 750 |
优化建议
- 预处理数据:若频繁查询,可将分组结果存储为物化视图。
- 索引优化:确保
timestamp
字段有索引,加速排序和窗口函数计算。 - 动态阈值:根据历史数据动态调整清零判断阈值,提高准确性。
方法二
with a1 as(select * from (--查询有清0 的表SELECTId, ProjectId, fd,val,dot,PointId,LAG(val) OVER (PARTITION BY ProjectId,PointId ORDER BY dot asc,val desc) AS prev_value , LAG(Id) OVER (PARTITION BY ProjectId,PointId ORDER BY dot asc,val desc) AS prev_Id FROM table1where fd >='2025-05-06'and fd<='2025-05-07'and dot<='2025-05-07 00:00:00'and ProjectId=170132 ) as twhere 1=1and val < prev_value * 0.1),av3 as(--查询有清0 的表的最后一条数据select * from (select a.id,a.PointId,a.fd, ROW_NUMBER() OVER (PARTITION BY a.ProjectId,a.PointId ORDER BY a.dot desc,a.val desc) AS rnfrom a1 t1,table1 awhere t1.PointId=a.pointId and t1.dot<a.dotand a.fd >='2025-05-06'and a.fd<='2025-05-07'and a.dot<='2025-05-07 00:00:00') as twhere t.rn=1) ,a2 as (--查询有清0 的表的前一条数据,当前数据 和最后一条数据的select a.*,-1 as preItem from a1,table1 awhere a1.prev_Id=a.Id union allselect a.*,0 as preItem from a1,table1 awhere a1.id=a.Id union allselect a.*,1 as preItem from av3 a3,table1 awhere a3.id=a.Id )select * from av3
相关文章:
某水表量每15分钟一报,然后某天示数清0了,重新报示值了 ,如何写sql 计算每日水量
要计算每日电量,需处理电表清零的情况。以下是针对不同数据库的解决方案: 方法思路 识别清零点:通过比较当前值与前一个值,若当前值明显变小(如小于前值的10%),则视为清零。分段累计ÿ…...

Ubuntu 系统部署 MySQL 入门篇
一、安装 MySQL 1.1 更新软件包 在终端中执行以下命令,更新系统软件包列表,确保安装的是最新版本的软件: sudo apt update 1.2 安装 MySQL 执行以下命令安装 MySQL 服务端: sudo apt install mysql-server 在安装过程中&…...

【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码
文章目录 运行结果简介代码功能概述运行结果核心模块解析代码特性与优势MATLAB例程代码调整说明相关公式视线角速率约束相对运动学方程导引律加速度指令运动学更新方程拦截条件判定运行结果 运行演示视频: 三维平行接近法导引运行演示 简介 代码功能概述 本代码实现了三维空…...
大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患
大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患 引言 随着生成式人工智能技术的快速演进,大语言模型(LLM)正在广泛应用于企业服务、政务系统、教育平台、金融风…...
vue3 按钮级别权限控制
在Vue 3中实现按钮级别的权限控制,可以通过多种方式实现。这里我将介绍几种常见的方法: 方法1:使用Vue 3的Composition API 在Vue 3中,你可以使用Composition API来创建一个可复用的逻辑来处理权限控制。 创建权限控制逻辑 首…...
vue3子组件获取并修改父组件的值
在子组件中,父组件传递来的 prop 是只读的,但是确实有修改的需求,故此做个小小研究 // 父组件使用模版:update:xxx"dialogVisible $event" // 子组件使用模版 // const emits defineEmits([update:xxx]); // emits(u…...
【Redis】Cluster集群
目录 1、背景2、核心特性【1】数据分片【2】高可用【3】去中心化【4】客户端重定向 3、集群架构【1】最小规模【2】节点角色【3】通信协议 4、数据分片与路由【1】哈希槽分配【2】客户端路由逻辑 5、故障恢复6、适用场景 1、背景 Redis Cluster是Redis官方提供的分布式解决方案…...

黑马Java面试笔记之 微服务篇(SpringCloud)
一. SpringCloud 5大组件 SpringCloud 5大组件有哪些? 总结 五大件分别有: Eureka:注册中心Ribbon:负载均衡Feign:远程调用Hystrix:服务熔断Zuul/Gateway:网关 如果项目用到了阿里巴巴ÿ…...

CLIP多模态大模型的优势及其在边缘计算中的应用
CLIP多模态大模型的优势及其在边缘计算中的应用 CLIP(Contrastive Language-Image Pre-training)模型,是OpenAI开发的一种多模态大模型。该模型通过对比学习的方式,在大规模图像-文本对上进行预训练,成功实现了图像和文…...

基于STM32语音识别柔光台灯
基于STM32语音识别柔光台灯 (程序+原理图+PCB+设计报告) 功能介绍 具体功能: 基于语音识别的智能LED柔光台灯设计,主要包括语音识别模块应用,PWM波控制LED柔光灯的亮度,…...

基于PSO粒子群优化的VMD-GRU时间序列预测算法matlab仿真
目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 6.1变分模态分解(VMD) 6.2 门控循环单元(GRU) 6.3 粒子群优化(PSO) 7.参考文献 8.算法完…...

探索未知惊喜,盲盒抽卡机小程序系统开发新启航
在消费市场不断追求新鲜感与惊喜体验的当下,盲盒抽卡机以其独特的魅力,迅速成为众多消费者热衷的娱乐与消费方式。我们紧跟这一潮流趋势,专注于盲盒抽卡机小程序系统的开发,致力于为商家和用户打造一个充满趣味与惊喜的数字化平台…...

基于开源AI大模型与AI智能名片的S2B2C商城小程序源码优化:企业成本管理与获客留存的新范式
摘要:本文以企业成本管理的两大核心——外部成本与内部成本为切入点,结合开源AI大模型、AI智能名片及S2B2C商城小程序源码技术,构建了企业数字化转型的“技术-成本-运营”三维模型。研究结果表明,通过AI智能名片实现获客留存效率提…...

Python----目标检测(YOLO简介)
一、 YOLO简介 [YOLO](You Only Look Once)是一种流行的物体检测和图像分割模型, 由华盛顿大学的约瑟夫-雷德蒙(Joseph Redmon)和阿里-法哈迪(Ali Farhadi)开发,YOLO 于 2015 年推出,…...
mysql+keepalived
文章目录 一、master1创建目录写入配置文件启动master1创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position二、master2创建目录写入配置文件启动master2创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position三、配置主主复制Maste…...

Profinet 协议 IO-Link 主站网关(三格电子)
一、产品概述 1.1 产品用途 SG-PN-IOL-8A-001 网关是 Profinet 从转 IO-Link 主的网关设备 ,可以将 IO-Link 从站设备接入 Profinet 系统,通过该网关可实现传感器及驱动器与控制 器之间的信息交互。网关有两个百兆网口和 8 个 IO-Link 端口,两…...

Ubuntu22.04 安装 Miniconda3
Conda 是一个开源的包管理系统和环境管理系统,可用于 Python 环境管理。 Miniconda 是一个轻量级的 Conda 发行版。Miniconda 包含了 Conda、Python和一些基本包,是 Anaconda 的精简版本。 1.下载安装脚本 在 conda官网 找到需要的安装版本࿰…...

Hubstudio浏览器如何使用Loongproxy?
1. 使用软件 1.1 Loongproxy 1. 顶级ISP资源:Loongproxy是神龙云旗下品牌,依托与全球领先ISP运营商的深度合作,Loongproxy 精选全球优质静态住宅IP资源。 2. IP池庞大:覆盖 100 国家/地区,构建庞大的 70 万 静态IP池…...

硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总
目录 一 555定时器基础知识 二、引脚功能 三、工作模式 1. 单稳态模式: 2. 双稳态模式(需要外部电路辅助): 3. 无稳态模式(多谐振荡器): 4. 可控脉冲宽度调制(PWM)模式: 四、典型应用 五、优点 二 555无稳态触发器 三 555单稳态触发器 四 555双稳态触发器…...

ComfyUI 对图片进行放大的不同方法
本篇里 ComfyUI Wiki将讲解 ComfyUI 中几种基础的放大图片的办法,我们时常会因为设备性能问题,不能一次性生成大尺寸的图片,通常会先生成小尺寸的图像然后再进行放大。 不同的放大图片方法有不同的特点,以下是本篇教程将会涉及的方法: 像素重新采样SD 二次采样放大使用放…...

Elasticsearch最新入门教程
文章目录 Elasticsearch最新入门教程1.Elasticsearch安装2.Kibana安装3.Elasticsearch关键概念4.SpringBoot整合Elasticsearch4.1 导入Elasticsearch数据4.2 创建SpringBoot项目4.3 修改pom.xml文件4.4 创建es实体类4.5 创建es的查询接口 5.DSL语句5.1 无条件查询5.2 指定返回的…...
第16节 Node.js 文件系统
Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示: var fs require("fs") 异步和同步 Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本ÿ…...

【Linux网络篇】:从HTTP到HTTPS协议---加密原理升级与安全机制的全面解析
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 HTTPS协议原理一.预备知识1.什么是“加密”2.为什么要“加密”…...
jenkins结合gitlab实现CI
Jenkins结合GitLab实现CI(持续集成) 持续集成(Continuous Integration, CI)是一种软件开发实践,开发者在代码提交后,系统会自动进行构建、测试,从而尽早发现问题。Jenkins和GitLab的结合可以高效…...
SQL进阶之旅 Day 17:大数据量查询优化策略
文章标题 【SQL进阶之旅 Day 17】大数据量查询优化策略 文章内容 开篇 欢迎来到"SQL进阶之旅"系列的第17天!在前面的16天中,我们从基础的表设计、索引应用到复杂的窗口函数和高级索引策略,逐步深入探讨了SQL的核心技术。今天我们…...

字符串 金额转换
package heima.Test09;import java.util.Scanner;public class Money {public static void main(String[] args) {//1。键盘录入一个金额Scanner sc new Scanner(System.in);//请输入一个数据String result "";int money;while (true) {System.out.println("请…...

浅聊一下,大模型应用架构 | 工程研发的算法修养系列(二)
大模型应用架构基础 AI应用演进概述 人工智能应用的发展经历了多个关键阶段,每个阶段都代表着技术范式的重大转变。 大语言模型基础 大语言模型(LLM)作为现代AI应用的核心组件,具有独特的技术特性和能力边界,理解这些基础对架构设计至关重要。…...

装载机防撞系统:智能守护,筑牢作业现场人员安全防线
在尘土飞扬、机械轰鸣的建筑工地上,装载机是不可或缺的 “大力士”,承担着土方搬运、物料装卸等繁重任务。然而,传统作业模式下,装载机的安全隐患时刻威胁着现场人员的生命安全与工程进度。随着智能化技术的突破,唯创安…...
上门服务小程序订单系统框架设计
一、逻辑分析 上门服务小程序订单系统主要涉及服务展示、用户下单、订单处理、服务人员接单与服务完成反馈等核心流程。 服务展示:不同类型的上门服务(如家政、维修等)需要在小程序中展示详细信息,包括服务名称、价格、服务内容介…...
11.MySQL事务管理详解
MySQL事务管理详解 文章目录 MySQL事务管理 事务的概念 事务的版本支持 事务的提交方式 事务的相关演示 事务的隔离级别 查看与设置隔离级别 读未提交(Read Uncommitted) 读提交(Read Committed) 可重复读(Repeatabl…...