SQL Server数据库查询帮助

问题描述:

我有一个名为'ProcessData'的表和'Process_Name'(数据类型:nvarchar(50)),'Start_At'(DataType:DateTime)和'End_At'列的数据库(SQL Server) (数据类型:日期时间)。我需要知道每个'时间间隔'(假设1秒)有多少个进程(Process_Name = PN)被打开(在'Start_at'列之后或等于'End_At'列)在这段时间内(它可以是具有相同数据的几行)。SQL Server数据库查询帮助

有谁知道如何使这个查询?

非常感谢,

对于任何间隔,你只是想是这样的:

SELECT COUNT(1) 
FROM ProcessData row 
WHERE (row.Start_At >= @start AND row.Start_At < @end) -- starts in interval 
OR (row.End_At >= @start AND row.End_At < @end) -- ends in interval 
OR (row.Start_At < @start AND row.End_at >= @end) -- spans interval 

(你不需要担心“完全在这个区间”,因为“在开始”和“ends in”covers that)

注意我假设@start是包容性的,而@end是独占的,这是一个非常常见的做法(避免重复计算边界等) - 但感觉*在不平等上添加/删除一些=。例如,要包含两端:

SELECT COUNT(1) 
FROM ProcessData row 
WHERE (row.Start_At >= @start AND row.Start_At <= @end) -- starts in interval 
OR (row.End_At >= @start AND row.End_At <= @end) -- ends in interval 
OR (row.Start_At < @start AND row.End_at > @end) -- spans interval 
+0

是的,这就是我所做的。但我想要一个能够促进ITSELF“时间间隔”的查询。结果是得到一张带有两列的表格,每次一列,第二列表示在这段时间内打开了多少个进程。 – menacheb 2010-04-18 10:14:55

+0

你有时间间隔列表吗?也许是UDF或CTE? – 2010-04-18 10:15:50

+0

不,我想从(例如:2010/04/17 00:00:00)开始,然后从这个日期开始每秒检查有多少过程开放,直到(例如:2010/04/18 00:00:00 )。 – menacheb 2010-04-18 10:18:47