Sql server SQL Server查询以显示并发运行的任务

Sql server SQL Server查询以显示并发运行的任务,sql-server,tsql,Sql Server,Tsql,我有一个记录应用程序运行的任务的表。它有3个相关列;TaskName、StartDateTime和EndDateTime 我需要编写一个查询,显示同时运行的任务 比如说 **TaskName | StartDateTime | EndDateTime** Task1 2014-08-18 11:16:29.000 2014-08-18 11:19:29.000 Task2 2014-08-18

我有一个记录应用程序运行的任务的表。它有3个相关列;TaskName、StartDateTime和EndDateTime

我需要编写一个查询,显示同时运行的任务

比如说

       **TaskName  |      StartDateTime      |  EndDateTime**
          Task1      2014-08-18 11:16:29.000    2014-08-18 11:19:29.000
          Task2      2014-08-18 11:17:29.000    2014-08-18 11:17:34.000        
          Task3      2014-08-18 11:18:29.000    2014-08-18 11:18:52.000
          Task4      2014-08-18 11:18:53.000    2014-08-18 11:21:12.000
根据我的示例,当Task1运行Task2时,Task3在Task1完成之前启动并完成。Task4在task1完成之前开始,但在task1完成之后结束

我希望能够看到并发任务,以便更好地分析性能问题


我甚至不知道从哪里开始,如果有一个我可以看的地方的例子,这可能足以让我弄明白。

这对你有用吗?我留下了一些注释掉的部分,以防您想要从两侧检索数据

DECLARE @StackOverflow TABLE (TaskName VARCHAR(5), StartDateTime DATETIME, EndDateTime DATETIME)
INSERT INTO @StackOverflow (TaskName, StartDateTime, EndDateTime)


SELECT 'Task1','2014-08-18 11:16:29.000','2014-08-18 11:19:29.000' UNION 
SELECT 'Task2','2014-08-18 11:17:29.000','2014-08-18 11:17:34.000' UNION         
SELECT 'Task3','2014-08-18 11:18:29.000','2014-08-18 11:18:52.000' UNION 
SELECT 'Task4','2014-08-18 11:18:53.000','2014-08-18 11:21:12.000' 

SELECT * FROM @StackOverflow

SELECT a.TaskName + ' begins while ' + b.TaskName + ' is running' Result--, a.*, b.* 
FROM 
    @StackOverflow a
     INNER JOIN 
    @StackOverflow b ON 
        a.TaskName <> b.TaskName AND 
        a.StartDateTime BETWEEN b.StartDateTime AND b.EndDateTime 
--UNION 
--SELECT b.TaskName + ' begins while ' + a.TaskName + ' is running'--, a.*, b.*
--FROM 
--  @StackOverflow a
--   INNER JOIN 
--  @StackOverflow b ON 
--      a.TaskName <> b.TaskName AND 
--      a.EndDateTime BETWEEN b.StartDateTime AND b.EndDateTime 
ORDER BY Result
结果

Task2在Task1运行时开始

Task3在Task1运行时开始

Task4在Task1运行时开始


你得设法把任务分解一下。我可能会首先指定一个时间跨度,然后查询在这段时间跨度之间开始或完成的任务。然后,您可以研究如何通过编程选择要查询的时间跨度。这是可行的,我将其更改为CTE,因为由于我的表的大小,上面的操作需要10分钟以上的时间。非常感谢。