加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 汇总历史正常运行时间数据

发布时间:2020-12-16 09:38:14 所属栏目:asp.Net 来源:网络整理
导读:我正在完成我的第一个asp.net网络应用程序,我遇到了一个棘手的问题.该Web应用程序旨在测试全国各地的网络设备并记录响应时间. Windows服务会定期检查这些设备,通常每1-10分钟检查一次.然后将每个检查的结果记录在具有此设计的SQL Server表中. (设备关闭时Res
我正在完成我的第一个asp.net网络应用程序,我遇到了一个棘手的问题.该Web应用程序旨在测试全国各地的网络设备并记录响应时间. Windows服务会定期检查这些设备,通常每1-10分钟检查一次.然后将每个检查的结果记录在具有此设计的SQL Server表中. (设备关闭时ResponseTime为NULL.)

CREATE TABLE [dbo].[DeviceStatuses] (

[DeviceStatusID] INT      IDENTITY (1,1) NOT NULL,[DeviceID]       INT      NOT NULL,[StatusTime]     DATETIME NULL,[ResponseTime]   INT      NULL,CONSTRAINT [PK_DeviceStatuses] PRIMARY KEY CLUSTERED ([DeviceStatusID] ASC),CONSTRAINT [FK_DeviceStatuses_Devices] FOREIGN KEY ([DeviceID]) REFERENCES [dbo].[Devices] ([DeviceID])
);

该服务已运行了几个月,设备数量最少,表格大约有500,000行.客户希望能够访问每个设备的3个月滚动停机摘要.有点像:

停机时间:
12/11/2012 3:20 PM – 3:42 PM
12/20/2012凌晨1:00 – 9:00

根据我的理解,我需要为每个NULL ResponseTimes块的开始和结束获取StatusTime,当然,对于特定的DeviceID.我已经在Google和StackOverflow上进行了多次搜索,但没有发现任何类似于我正在尝试做的事情. (也许我没有使用正确的搜索条件.)我的兄弟,一位经验丰富的程序员,建议我可以在SQL Server中使用CURSOR,尽管他承认CURSOR性能很差并且需要预定的任务.有什么建议?

解决方法

declare  @DeviceStatuses table(

[DeviceStatusID] INT      IDENTITY (1,[ResponseTime]   INT      NULL)


Insert into @DeviceStatuses([DeviceID],[StatusTime],[ResponseTime])
Values
(1,'20120101 10:10',2),(1,'20120101 10:12',NULL),'20120101 10:14','20120102 10:10','20120102 10:12','20120102 10:14',(2,'20120101 10:19','20120101 10:20','20120101 10:21','20120101 10:22',2);

Select [DeviceID],MIN([StatusTime]) as StartDown,MAX([StatusTime]) as EndDown
from
(
Select [DeviceID],(Select MAX([StatusTime]) from @DeviceStatuses s2 where s2.DeviceID=s1.DeviceID and s2.StatusTime<s1.StatusTime and s2.ResponseTime is not null) as gr
from @DeviceStatuses s1
where s1.ResponseTime is null
)a
Group by [DeviceID],gr
order by [DeviceID],gr

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读