1

上次我在这里问一个问题时,我有很多关于如何解决特定问题的好主意。就像我上次解释的那样,编程只是我喜欢做的事情,但这不是我在学校学习的东西,所以我没有适当的做事方法。我是一名在经济衰退中挣扎的电气工程师,在这里和那里做一些编程演出。

目前我在一家做 VoIP 的公司工作。他们购买的软件缺乏其他系统的许多重要功能,所以我决定开始构建一些工具,让我能够完成这些缺失的事情。

我认为非常重要的一件事是找出特定给定时间内的 CALLS 的 MAX LOAD(同时呼叫的最大数量)。例如,我想知道 8 月 3 日的最大同时通话次数。

现在,对我来说幸运的是,该软件将所有信息存储在 MySQL 数据库中,因此我有一个表,其中包含自系统首次运行以来的所有调用。

“Calls”表有 2 个文件,分别称为“call_start”和“call end”,它们的类型为“datetime”。

基于此信息,我想弄清楚如何查询数据库并找出在我指定的时间范围内同时进行的最高活动呼叫数。

我主要使用 C#,因此欢迎使用 C# 的想法。我不确定它是否可以专门在 MySQL 中完成,但这也可以。

感谢大家的帮助。

4

3 回答 3

1

我看了类似的问题,并没有看到一个简单的答案。基本上,您想知道每次通话开始时有多少次通话。以下将起作用

create temporary table starts (call_started time);
insert into starts select distinct call_started from calls;

select starts.call_started, count(*)
  from starts, calls
  where starts.call_started >= calls.call_started and starts.call_started <= calls.call_ended
  group by starts.call_started
  order by count(*) desc;

如果您只想要最大负载,只需在最终查询中添加“LIMIT 1”。如果要绘制结果图,只需按开始时间排序。

于 2009-08-06T04:17:11.140 回答
1

前段时间SO上也有类似的问题,看一下: Find number of concurrent users in a SQL records

我希望这也适用于 Mysql。

于 2009-08-06T00:55:38.887 回答
0

不是最有效的方法,但这会给你每小时(今天)的计数,包括在那一小时内开始和结束的所有呼叫。

select hour(call_start),count(*) from calls 
where call_end <= hour(call_start) and date(call_start) = date(now())
group by hour(call_start);
于 2009-08-06T02:23:04.213 回答