高效计算设备的总共的运行时间和停止时间。

iNeuOS工业互联网 2013-04-17 10:40:29
数据表如下:

PDCHistoryID CurDT RunState
1 2012-7-30 9:21:29 Run
2 2012-7-30 9:21:32 Run
3 2012-7-30 9:21:33 Stop
4 2012-7-30 9:21:34 Run
5 2012-7-30 9:21:35 Run
6 2012-7-30 9:21:37 Run
7 2012-7-30 9:21:38 Stop
8 2012-7-30 9:21:39 Stop
9 2012-7-30 9:21:40 Stop
10 2012-7-30 9:21:41 Stop
11 2012-7-30 9:21:42 Stop
12 2012-7-30 9:21:43 Stop
13 2012-7-30 9:21:44 Run
14 2012-7-30 9:21:45 Run
15 2012-7-30 9:21:46 Run
16 2012-7-30 9:21:48 Run
17 2012-7-30 9:21:49 Run
18 2012-7-30 9:21:50 Stop
19 2012-7-30 9:21:51 Stop
20 2012-7-30 9:21:52 Stop
21 2012-7-30 9:21:53 Stop
22 2012-7-30 9:21:54 Stop
23 2012-7-30 9:21:55 Stop
24 2012-7-30 9:21:56 Stop
25 2012-7-30 9:21:58 Stop
26 2012-7-30 9:21:59 Stop

计算运行时长方法:连续运行状态为'Run',直到状态变为'Stop',1.用Stop状态的时间减去一开始状态为'Run'的时间;2.用连续状态为'Run'的最后一条记录的时间减去第一条记录的时间。按时间升序。所有类似的情况,对差值求和。

计算停机时长方法:连续运行状态为'Stop',直到状态变为'Run',1.用Run状态的时间减去一开始状态为'Stop'的时间;2.用连续状态为'Stop'的最后一条记录的时间减去第一条记录的时间。按时间升序。所有类似的情况,对差值求和。

通过SQL语句得到设备的运行多长时间和停止多长时间,精确到秒,
结果数据如下(例如):

RunState Seconds
Run 10
Stop 10


我自己弄了一个方法,但是效率似乎不高,如下:

第一步:先建立一下临时表‘temp’.增加一个自动排序ID字段“RowIndex”。
第二步:先把状态为‘Run’的记录提取出来。并把记录插入到表“temp”
第三步:用SQL语句计算运行时长。如下

select sum(DateDiff('s',t3.sdt,t3.edt)) as seconds
from(
select min(t2.CurDT) as sdt, max(t2.CurDT) as edt
from (
select t1.PDCHistoryID, t1.CurDT,(t1.PDCHistoryID - t1.RowIndex ) as delta
from
(
select PDCHistoryID,RowIndex,CurDT from temp order by PDCHistoryID ASC
) AS t1
)
AS t2
group by t2.delta
) as t3


注:停止时长类似。

还有其他好方法没???

...全文
799 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
此贴沉了???????、

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧