我有一个数据库(SQL Server),其中包含名为'ProcessData'的表和名为'Process_Name'的列(数据类型:nvarchar(50)),'Start_At'(数据类型:DateTime)和'End_At'(数据类型:DateTime )。
我需要知道每个'时间间隔'(比如1秒)打开了多少个进程(Process_Name = PN)(等于'Start_at'列之前或之前或等于'End_At'列)在此期间(它可以是具有相同数据的几行)。
有谁知道如何进行此查询?
非常感谢,
答案 0 :(得分:0)
对于任何时间间隔,您只需要:
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
(你不必担心“完全在这段时间内”,因为“开始时”和“结束时”涵盖了这一点)
注意我假设@start是包含的,@ end是独占的,这是一种非常常见的方法(避免重复计算边界等) - 但随意添加/删除一些{{ 1}}关于不等式。例如,要包括两端:
=