Sql server SQL Server查询以显示并发运行的任务
我有一个记录应用程序运行的任务的表。它有3个相关列;TaskName、StartDateTime和EndDateTime 我需要编写一个查询,显示同时运行的任务 比如说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
**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分钟以上的时间。非常感谢。