首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询从累计器返回15分钟总计,累计时间超过24小时。

SQL查询从累计器返回15分钟总计,累计时间超过24小时。
EN

Stack Overflow用户
提问于 2014-06-06 14:35:12
回答 2查看 471关注 0票数 1

我有一些电表连接到一个PLC (可编程控制器)。

可编程控制器在24小时内对仪表上的kWh脉冲进行计数(集成)。

伯爵在午夜被重置。

当前计数值每秒钟记录到一个表中。

我需要在每15分钟内检索一米的kWh总数。

例如:

代码语言:javascript
复制
Meter count at 11:00:00 = 1000  
Meter count at 11:14:59 = 1110  
Meter count at 11:29:59 = 1200       
Meter count at 11:59:59 = 1400

15分钟kWh总计:

代码语言:javascript
复制
At 11:14:59 = 110  
At 11:29:59 = 90  
At 11:59:59 = 200  

基本上,我想从前15分钟的计数中减去15分钟的计数。

数据库是MSSQLServer。

是否可以使用select查询返回上述内容。

我需要将这些数据导出到csv文件中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-06 15:12:22

我认为CTE和self join足以达到预期的效果:

代码语言:javascript
复制
--constructing ID
WITH vPLC as (select *, ROW_NUMBER() OVER (order by date) as recID  
from @PLC
)
select vPLC.*, COALESCE( vPLC.value - n.Value, 0 ) as diffVal
from vPLC
     left JOIN vPLC n on n.recID = vPLC.recID - 1

----------OUTPUT----------
recId  date                 value   diffVal
1      6/5/2014 11:00:00 AM 1000    0
2      6/5/2014 11:14:59 AM 1110    110
3      6/5/2014 11:29:59 AM 1200    90
4      6/5/2014 11:59:59 AM 1400    200

证明代码在这里

票数 2
EN

Stack Overflow用户

发布于 2014-06-10 19:57:53

我把这作为一个分开的答案发布,因为它使用了一个不同的方法来解决这个问题,如果这不是正确的事情,我将编辑我以前的答案来添加这个答案。

为了得到结果,就像在问题中一样,可以利用数据的一个固有属性:消耗的kW是不递减的,这意味着最小值总是第一个,最大值永远是每个块的最后一个。

使用这些属性的快速和脏查询是

代码语言:javascript
复制
SELECT MAX(_Time) _Time
     , BlockConsume = MAX(KWh) - MIN(KWh)
FROM   UtilityMeter
GROUP BY DateDiff(mi, 0, _Time) / 15
ORDER BY _Time

该组锚点在精确时刻点发生变化,MAX(_Time)将是一个精确季度之前的最后一个值: 14.59,29.59,44.59,59.99。

查询工作,但这是一个表扫描,以获得更快一点,可以删除所有未使用的数据,通过过滤掉所有的898个(15*60-2)行,这些行不是一个组的最后一个行

代码语言:javascript
复制
WITH Quarter AS (
  SELECT _Time, KWh
       , DateDiff(mi, 0, _Time) / 15 Block
  FROM   UtilityMeter
  WHERE  DateDiff(s, 0, _Time) % (900) IN (0, 899)
)
SELECT MAX(_Time) _Time
     , BlockConsume = MAX(KWh) - MIN(KWh)
FROM   Quarter
GROUP BY Block
ORDER BY _Time
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24084400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档