Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSSQL查找持续时间工作时间较长_Sql_Sql Server_Epoch - Fatal编程技术网

MSSQL查找持续时间工作时间较长

MSSQL查找持续时间工作时间较长,sql,sql-server,epoch,Sql,Sql Server,Epoch,我需要能够找出我的每个CPU工作人员在一段时间内工作的时间。数据库的结构设置为记录每个工作单元的历元开始时间,历元结束时间,计算机名和工人编号。我需要能够编写一个查询,让我为查询范围选择一个@pquerystartime和@pQueryEndTime,并返回一个包含每个工作人员(唯一的计算机名称+工作人员编号)正常运行时间和停机时间的表 我目前正在以高分辨率进行“采样”,以查看每个工人是否在任何给定的时刻工作,但停机时间很短(20小时工作到30秒),没有什么突出的地方,或者如果出现,则会严重扭曲

我需要能够找出我的每个CPU工作人员在一段时间内工作的时间。数据库的结构设置为记录每个工作单元的
历元开始时间
历元结束时间
计算机名
工人编号
。我需要能够编写一个查询,让我为查询范围选择一个
@pquerystartime
@pQueryEndTime
,并返回一个包含每个工作人员(唯一的
计算机名称+工作人员编号
)正常运行时间和停机时间的表

我目前正在以高分辨率进行“采样”,以查看每个工人是否在任何给定的时刻工作,但停机时间很短(20小时工作到30秒),没有什么突出的地方,或者如果出现,则会严重扭曲信息

我不擅长SQL,因此如果有人能在解释如何从上述问题到概念化解决方案的过程中帮助我,我将不胜感激。另外,如果还有什么我不清楚的地方,请告诉我。谢谢

Source Table:
epoch_start_time(float), epoch_end_time(float), computer_name(varchar), worker_number(int)
0.0000,2.0000,bob,1
1.0000,3.0000,able,3
3.0000,4.0000,bob,1
4.0000,6.0000,bob,2
结果表:
computer\u name
worker\u number
的每个不同组合都有自己的行,其中
seconds\u working
@pquerystartime
@pQueryEndTime
之间每个工作单元工作的时间总和

如果我给它一个0.000的
@pquerystartime
和一个5的
@pQueryEndTime
,你会得到:

computer_name(varchar), worker_number(int), seconds_working(float), seconds_down(float)
bob,1,3.0000,2.0000
bob,2,1.0000,4.0000
able,3,2.0000,3.0000
我想我解决了:(没有足够的分数作为答案提交)

选择计算机名称、工人编号、,
总数(
(当epoch\u end\u time<@QueryEndTime然后epoch\u end\u time ELSE@QueryEndTime end时的情况)
-
(当epoch\u start\u time<@querystartime然后epoch\u start\u time ELSE@querystartime END时的情况)
)
当你工作时
从数据库测试
哪里
(历元开始时间<@QuerystartTime和历元结束时间>@QuerystartTime)
或
(epoch\u start\u time>@querystartime和epoch\u start\u time<@QueryendTime)
按计算机名称、工人编号分组

您能编辑您的问题并显示问题表格的布局吗?知道你在寻找什么样的结果也会很有帮助。列出一些样本数据和该样本数据的预期输出我认为如果你用一个简单的查询收回数据并在数据库外处理数字,这会简单很多。
SELECT computer_name,worker_number, 
SUM(
(CASE WHEN epoch_end_time < @QueryEndTime THEN epoch_end_time ELSE @QueryEndTime END)
-
(CASE WHEN epoch_start_time < @QuerystartTime THEN epoch_start_time ELSE @QuerystartTime END)
)
AS seconds_working 
FROM dbtest 
WHERE 
(epoch_start_time < @QuerystartTime AND epoch_end_time > @QuerystartTime)
OR
(epoch_start_time > @QuerystartTime AND epoch_start_time < @QueryendTime)
GROUP BY computer_name,worker_number