我有一组呼叫详细记录,根据这些记录,我应该确定每个系统每小时的平均并发活动呼叫数(精度为一分钟).如果我查询下午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 …Run Code Online (Sandbox Code Playgroud) 据我所知,"不能排序大小为9754的行,这大于允许的最大值8094".来自SQL Server的是由一行中有超过9k个字符的行引起的,这个行大于SQL Server 7中的页面大小限制.但是我没有通过下面的数据调用一个命令,所以为什么错误说它不能排序?
SELECT <a number of columns...>
FROM Category10Master c10
JOIN Category20Master c20 ON c10.Cat10ID = c20.ParentCatID
JOIN Category25Master c25 ON c20.Cat20ID = c25.ParentCatID
JOIN Category30Master c30 ON c25.Cat25ID = c30 .ParentCatID
JOIN Item i ON c30.Cat30ID = i.ParentCatID
Run Code Online (Sandbox Code Playgroud)
编辑:是的,我知道我可以调用更少的列来解决这个问题 - 实际的查询显式调用所需的列,但仍超过行大小限制.这实际上是在一个被称为站点范围的视图中,因此更改视图以缩回更少的列不是一个有吸引力的选项 - 需要修改数十个页面以从视图以外的其他位置获取数据.我不幸的是已经把一个丑陋的设计搞得一团糟,我希望有人能提供比吸引更少数据更有吸引力的解决方案.