我有一个表记录使用我们的应用程序运行的任务。它有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完成之后完成。
我希望能够看到并发任务,以更好地分析性能问题。
我甚至不知道从哪里开始,如果有一个我可以看到的例子那可能足以让我弄清楚。
答案 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运行时开始