Я пытаюсь найти максимальное количество звонков на линии SIP из нашей базы данных.Вот пример данных:
ID StartTime EndTime
66 01/03/2018 5:31:18 01/03/2018 5:31:51
66 01/03/2018 5:31:51 01/03/2018 5:32:19
66 01/03/2018 5:32:21 01/03/2018 5:34:10
66 01/03/2018 5:32:31 01/03/2018 5:33:42
66 01/03/2018 5:33:02 01/03/2018 5:33:42
66 01/03/2018 5:33:23 01/03/2018 5:34:10
66 01/03/2018 5:33:45 01/03/2018 5:34:38
66 01/03/2018 5:34:08 01/03/2018 5:34:38
То, как я вычисляю это, визуально, число должно быть 5.
Ближайшее, что я дошел до этого, вернуло 4для этого примера и отключен на других тестах.Другой код, который я тестировал, был дико отключен (на 100 с).
DECLARE @ReportStartDate datetime, @ReportEndDate datetime,
@ReportStartTime time, @ReportEndTime time
SET @ReportStartDate='1/3/2018'
SET @ReportEndDate='1/3/2018'
SET @ReportStartTime='05:00:00'
SET @ReportEndTime='06:00:00'
SET @ReportStartDate = (SELECT @ReportStartDate + @ReportStartTime)
SET @ReportEndDate = (SELECT @ReportEndDate + @ReportEndTime);
WITH C1 AS
(
SELECT startdate AS ts, +1 AS TYPE,
ROW_NUMBER() OVER(ORDER BY startdate) AS start_ordinal
FROM table
WHERE startdate >= @ReportStartDate and startdate <= @ReportEndDate
and Service_id=66 --hardcoded for testing
UNION ALL
SELECT enddate, -1, NULL
FROM table
WHERE enddate >= @ReportStartDate and enddate <=
@ReportEndDate
and Service_id=66 -- hardcoded for testing
),
C2 AS
(
SELECT *,
ROW_NUMBER() OVER( ORDER BY ts, TYPE) AS start_or_end_ordinal
FROM C1
)
SELECT MAX(2 * start_ordinal - start_or_end_ordinal) AS mx
FROM C2
WHERE TYPE = 1