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
是的,这就是我所做的。但我想要一个能够促进ITSELF“时间间隔”的查询。结果是得到一张带有两列的表格,每次一列,第二列表示在这段时间内打开了多少个进程。 – menacheb 2010-04-18 10:14:55
你有时间间隔列表吗?也许是UDF或CTE? – 2010-04-18 10:15:50
不,我想从(例如:2010/04/17 00:00:00)开始,然后从这个日期开始每秒检查有多少过程开放,直到(例如:2010/04/18 00:00:00 )。 – menacheb 2010-04-18 10:18:47