我有一组呼叫详细记录,从这些记录中,我应该确定每个系统每小时的平均并发活动呼叫(精度为一分钟)。如果我查询晚上 7 点到晚上 8 点,我应该看到该小时内(对于每个系统)的平均并发呼叫数(平均每分钟的并发呼叫数)。
所以,我需要一种方法来检查 7:00-7:01、7:01-7:02 等的活动呼叫计数,然后平均这些数字。如果呼叫的时间和持续时间在被检查的当前分钟内,则认为呼叫处于活动状态。
使这更加困难的是它需要跨越 SQL 7.0 和 SQL 2000(2000 中的某些函数在 7.0 中不可用,例如 GetUTCTime()),如果我能让 2000 工作我会很高兴。
我可以采取什么方法来解决这个问题?
我考虑在检查的一小时内循环通过分钟 (60) 并添加该分钟之间的呼叫计数,然后以某种方式交叉引用持续时间以确保呼叫从晚上 7: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's 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)