Sakurazczxcz 2022-03-01 19:56 采纳率: 66.7%
浏览 58
已结题

用SQL算出每块电表的用电量

怎么用sql求出每块电表每分钟,每15分钟,每小时的用电量。

img

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-01 21:17
    关注

    请说明一下使用的是什么数据库,以及数据库的版本,还有你最终想得到的数据是长什么样子,有哪些字段。
    我,先假定你这个数据可以确保每个电表每分钟都一条记录,最后想要的数据是在这个数据的基础上加三列,
    那么这个最简单的写法就是用开窗函数的lag将上n行的数值拉到本行,再相减。

    select a.*,
    (lag(数值)over(partition by 电表名称 order by 数据生成时间))-a.数值 一分钟用电量,
    (lag(数值,15)over(partition by 电表名称 order by 数据生成时间))-a.数值 十五分钟用电量,
    (lag(数值,60)over(partition by 电表名称 order by 数据生成时间))-a.数值 一小时用电量  from 表 a
    

    但是有部分数据库是不支持开窗函数的。
    假设数据是不完整的或者存在某分钟的数据重复了,上面这个方法就会有偏差,但同理,假设倒推60分钟后,刚好那分钟没有采集到数据,这个该怎么算,你也得给个规则

    另外,如果你是想聚合数据,按指定的时间点来进行分段统计,那么你需要说明一下每15分钟的第1分钟是从哪里开始


    你这个格式的话,要说明一下每个字段打算怎么计算,明明输出的每个电表只有一行记录,哪里来的每小时?
    如果是平均每小时的用电量,那只要算出平均每分钟直接乘60,
    你用ivalue求和是不对的,因为这个值是抄表记录,不是表示1分钟用了这么多电,比如电表初始记录为1000,下1分钟电表为1020,那么这分钟就用了20度电,
    因此你如果确定是计算平均用电的话,只需要

    1. 拿每个电表的最后一个数值减去第一个数据,得到总用电量,
    2. 然后用最后一次时间减去第一次时间,得时长并转换为分钟,
    3. 最后用总用电量除以时长即可。
      但这种平均用电量在实际使用中并没有什么意义,看不到任何数据走势,无法区分用电高峰期
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上