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

时间:2014-08-20 17:36:44

标签: 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 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在任务1完成之前开始并完成。 Task4在task1完成之前启动,但在Task1完成之后完成。

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

我甚至不知道从哪里开始,如果有一个我可以看到的例子那可能足以让我弄清楚。

1 个答案:

答案 0 :(得分:1)

这样的事情对你有用吗?我留下了一些注释掉的部分,以防你想要从双方检索数据。

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
  

结果

     

任务2在Task1运行时开始

     

任务3在Task1运行时开始

     

任务4在Task1运行时开始