请说明一下使用的是什么数据库,以及数据库的版本,还有你最终想得到的数据是长什么样子,有哪些字段。
我,先假定你这个数据可以确保每个电表每分钟都一条记录,最后想要的数据是在这个数据的基础上加三列,
那么这个最简单的写法就是用开窗函数的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度电,
因此你如果确定是计算平均用电的话,只需要