了解在您的环境中可能需要考虑更多因素,您可以尝试这样的事情(可在 SSMS 中运行):
/* TASKTRACKING MOCK-UP */
DECLARE @TaskTracking TABLE (
TaskTrackingId INT,
TaskConfigId INT,
TaskGuid VARCHAR(50),
TaskStatusId INT,
CreatedDate DATETIME
);
/* TASKTRACKING DATA */
INSERT INTO @TaskTracking ( TaskTrackingId, TaskConfigId, TaskGuid, TaskStatusId, CreatedDate )
VALUES
( 3426760, 270, 'e881670a-e643-4b25-a4f4-dd30fc28bd23', 10, '2020-08-26 19:00:00.053' ),
( 3424077, 270, '9ff 91e67-071b-48f2-bOdb-172d3e9f 234a', 20, '2020-08-26 17:19:30.740' ),
( 3422102, 270, '9ff 91e67-071b-4812-bOdb-172d3e9f 234a', 10, '2020-08-26 16:52:36.443' ),
( 3422101, 270, '6ef629ae-8ee1-44b7-aedd-43b246379e8f', 20, '2020-08-26 16:52:36.430' ),
( 3411426, 270, '6ef629ae-8ee1-44b7-aedd-43b246379e8f', 10, '2020-08-26 14:26:01.613' ),
( 3411425, 270, 'ce4f8688-5191-4735-a7e9-525781f3d72f', 20, '2020-08-26 14:26:01.600' ),
( 3400704, 270, 'ce4f8688-5191-4735-a7e9-525781f3d72f', 10, '2020-08-26 12:00:00.190' ),
( 3397311, 270, '7dbcc241-3c86-426f-9f6b-ef 12dfd5b2a1', 20, '2020-08-26 11:12:37.650' ),
( 3397310, 270, '7dbcc241-3c86-426f-9f6b-ef 12dfd5b2a1', 10, '2020-08-26 11:12:37.620' ),
( 3397309, 270, 'e46782caf 763-4580-89f 9-99da0d6a1762', 20, '2020-08-26 11:12:37.610' ),
( 3397077, 270, 'e46782caf763-4580-89f9-99da0d6a1762', 10, '2020-08-26 11:09:47.410' ),
( 3397076, 270, '7b433f62-6089-44ba-ad6c-eb767bd7e056', 20, '2020-08-26 11:09:47.400' ),
( 3397075, 270, '1890732e-cec3-476-9f44-69d37105ee40', 20, '2020-08-26 11:09:47.400' ),
( 3395100, 270, '1890732e-cec3-476-9f44-69d37105ee40', 10, '2020-08-26 10:42:42.740' ),
( 3395099, 270, 'db05513a-20d5-4e40-96cc-c310ff1a0d4b', 20, '2020-08-26 10:42:42.730' ),
( 3394726, 270, '7b433f62-6089-44ba-ad6c-eb767bd7e056', 10, '2020-08-26 10:37:46.750' );
/* Return a list of tasks that have overlapping TaskConfigId values */
SELECT
*
FROM (
SELECT
TaskConfigId,
TaskGuid,
MIN ( CreatedDate ) AS MinDate,
MAX ( CreatedDate ) AS MaxDate
FROM @TaskTracking AS task
GROUP BY
TaskConfigId, TaskGuid
) AS Tasks
OUTER APPLY (
SELECT
COUNT ( DISTINCT TaskGuid ) AS OverlapTasks,
STRING_AGG ( TaskGuid, '|' ) AS OverlapGuids
FROM @TaskTracking AS x
WHERE
x.TaskConfigId = Tasks.TaskConfigId
AND x.CreatedDate > Tasks.MinDate AND x.CreatedDate <= Tasks.MaxDate
AND x.TaskGuid <> Tasks.TaskGuid
) AS Overlaps
WHERE
Overlaps.OverlapTasks > 0
ORDER BY
MinDate;
返回
+--------------+--------------------------------------+-------------------------+-------------------------+--------------+--------------------------------------------------------------------------------------------------------------+
| TaskConfigId | TaskGuid | MinDate | MaxDate | OverlapTasks | OverlapGuids |
+--------------+--------------------------------------+-------------------------+-------------------------+--------------+--------------------------------------------------------------------------------------------------------------+
| 270 | 7b433f62-6089-44ba-ad6c-eb767bd7e056 | 2020-08-26 10:37:46.750 | 2020-08-26 11:09:47.400 | 2 | 1890732e-cec3-476-9f44-69d37105ee40|1890732e-cec3-476-9f44-69d37105ee40|db05513a-20d5-4e40-96cc-c310ff1a0d4b |
| 270 | 1890732e-cec3-476-9f44-69d37105ee40 | 2020-08-26 10:42:42.740 | 2020-08-26 11:09:47.400 | 1 | 7b433f62-6089-44ba-ad6c-eb767bd7e056 |
+--------------+--------------------------------------+-------------------------+-------------------------+--------------+--------------------------------------------------------------------------------------------------------------+