У меня есть набор подробных записей вызовов, и из этих записей я должен определить средние одновременные активные вызовы на систему в час (с точностью до одной минуты). Если я запрашиваю от 7 вечера до 8 вечера, я должен увидеть средние одновременные вызовы на час (усредняя одновременные вызовы на каждую минуту) в течение этого часа (для каждой системы).
Итак, мне нужен способ проверить количество активных вызовов за 7: 00-7: 01, 7: 01-7: 02 и т.д., а затем усреднить эти числа. Вызов считается активным, если время и продолжительность вызова попадают в текущую минуту.
Что еще труднее, так это то, что он должен охватывать SQL 7.0 и SQL 2000 (некоторые функции в 2000 году недоступны в 7.0, например GetUTCTime()), если я могу просто получить 2000 рабочих, я буду счастливым.
Какие подходы к этой проблеме можно взять?
Я подумал о том, чтобы пройти через минуты (60) в проверяемом часе и добавить количество вызовов, которые находятся между этой минутой, а затем как-то перекрестно ссылаться на продолжительность, чтобы убедиться, что вызов, который начинается в 19:00, и длительность 300 секунд показывает активную в 7:04, но я не могу себе представить, как подойти к проблеме. Я попытался выяснить способ взвешивания каждого звонка с определенной минуты, который бы сказал мне, был ли звонок активным в течение этой минуты или нет, но не смог найти эффективного решения.
Типы данных здесь такие же, как я должен запросить. У меня нет никакого контроля над схемой (кроме, возможно, преобразования данных и вставки в другую таблицу с более подходящими типами данных). Я предоставил некоторые примеры данных, которые, как я знаю, имеют одновременные активные вызовы.
CREATE TABLE Records(
seconds char(10),
time char(4),
date char(8),
dur int,
system int,
port int,
)
--seconds is an stime value. It the difference of seconds from UTC 1/1/1970 00:00:00 to the current UTC time, we use it as an identifier (like epoch).
--time is the time the call was made.
--date is the day the call was made.
--dur is the duration of the call in seconds.
--system is the system number.
--port is the port on the system (not particularly relevant for this question).
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924228','1923','20090416',105,2,2)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239923455','1910','20090416',884,1,97)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924221','1923','20090416',116,2,15)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924259','1924','20090416',90,1,102)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239923458','1910','20090416',891,2,1)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924255','1924','20090416',99,2,42)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924336','1925','20090416',20,2,58)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924293','1924','20090416',64,2,41)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239923472','1911','20090416',888,2,27)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924347','1925','20090416',25,1,100)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924301','1925','20090416',77,2,55)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924332','1925','20090416',52,2,43)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924240','1924','20090416',151,1,17)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924313','1925','20090416',96,2,62)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924094','1921','20090416',315,2,16)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239923643','1914','20090416',788,2,34)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924447','1927','20090416',6,2,27)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924342','1925','20090416',119,2,15)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924397','1926','20090416',76,2,41)
INSERT INTO Records(seconds, time, date, dur, system, port) VALUES('1239924457','1927','20090416',23,2,27)