1

前回ここで質問したとき、特定の問題を解決する方法についてたくさんの素晴らしいアイデアを得ることができました。前回もお話しましたが、プログラミングは大好きなのですが、学校で習ったわけではないので、きちんとしたやり方がありません。私は不況に苦しんでいる電気技師で、あちこちでプログラミングの仕事をしています。

現在、私は VoIP を行う会社で働いています。彼らが購入したソフトウェアには、他のシステムに備わっている多くの重要な機能が欠けているため、これらの欠けている機能を実行できるようにするツールをいくつか作成することにしました。

私が非常に重要だと考えていることの 1 つは、特定の時間内の CALLS の最大負荷 (同時通話の最大数) を見つけることです。たとえば、8 月 3 日の最大同時通話数を知りたいとします。

幸運なことに、このソフトウェアはすべての情報を MySQL データベースに保存するので、システムが最初に実行を開始してからのすべての呼び出しを含むテーブルがあります。

「Calls」テーブルには、「call_start」と「call end」という 2 つのファイルがあり、タイプは「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;

最大負荷のみが必要な場合は、最後のクエリに「LIMIT1」を追加するだけです。結果をグラフ化する場合は、代わりに開始時刻で並べ替えてください。

于 2009-08-06T04:17:11.140 に答える
1

少し前に SO に同様の質問がありました。見てみましょう: SQL レコード内の同時ユーザー数を検索する

これがMysqlでも機能することを願っています。

于 2009-08-06T00:55:38.887 に答える
0

最も効率的な方法ではありませんが、これにより、その時間内に開始および終了したすべての通話を含む、1 時間あたり (今日の) のカウントが得られます。

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 に答える