2009-08-06 5 views
1

Das letzte Mal, als ich hier eine Frage stellte, bekam ich eine Menge toller Ideen, wie man ein bestimmtes Problem löst. Wie ich schon beim letzten Mal erklärt habe, ist Programmieren einfach etwas, das ich gerne mache, aber es ist nichts, was ich in der Schule gelernt habe, also habe ich keine richtigen Methoden, Dinge zu tun. Ich bin ein Elektroingenieur, der durch eine Rezession kämpft und einige Programmierauftritte hier und dort macht.Analysieren von Telefonanrufen in MySQL DB

Derzeit arbeite ich für eine Firma, die VoIP macht. Die Software, die sie gekauft haben, fehlt in vielen wichtigen Funktionen anderer Systeme, also habe ich beschlossen, ein paar Werkzeuge zu bauen, die es mir ermöglichen, diese fehlenden Dinge zu tun.

Eines der Dinge, die ich für sehr wichtig halte, ist das Herausfinden der MAX LOAD von CALLS in einer bestimmten Zeit (maximale Anzahl gleichzeitiger Anrufe). Zum Beispiel möchte ich die maximalen gleichzeitigen Telefonanrufe am 3. August wissen.

Jetzt, glücklicherweise für mich, speichert diese Software alle ihre Informationen über eine MySQL-Datenbank, so habe ich eine Tabelle mit allen Anrufen, seit das System zum ersten Mal gestartet wurde.

Die Tabelle "Anrufe" enthält 2 Dateien mit den Namen "call_start" und "call end", die vom Typ "datetime" sind.

Basierend auf diesen Informationen möchte ich herausfinden, wie ich die Datenbank abfragen und herausfinden konnte, welche die höchste Anzahl an aktiven Anrufen gleichzeitig in einem von mir vorgegebenen Zeitrahmen war.

Ich arbeite hauptsächlich mit C#, also Ideen mit C# wäre willkommen. Ich bin nicht sicher, ob es ausschließlich in MySQL möglich wäre, aber das würde auch funktionieren.

Danke allen für die Hilfe.

Antwort

0

Nicht der effizienteste Weg, aber es gibt Ihnen eine Zählung pro Stunde (für heute), einschließlich aller Anrufe, die innerhalb dieser Stunde beginnen und enden.

select hour(call_start),count(*) from calls 
where call_end <= hour(call_start) and date(call_start) = date(now()) 
group by hour(call_start); 
+0

Danke für die Antwort, nicht das, was ich suchte, aber ich schätze es trotzdem. – gus

1

Ich sah die similar question an und nicht eine einfache Antwort sehen. Grundsätzlich möchten Sie wissen, wie viele Anrufe es bei jedem Anruf gibt. Im Folgenden würde

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; 

arbeiten Wenn Sie nur die maximale Belastung, fügen Sie einfach „LIMIT 1“ an die letzte Abfrage wollte. Wenn Sie die Ergebnisse grafisch darstellen möchten, sortieren Sie einfach nach der Startzeit.

+0

Um die ursprüngliche Frage vollständig zu erfüllen, müssen Sie der INSERT-Anweisung eine WHERE-Klausel hinzufügen. – Lucky

+0

Hey, das sieht einfach genug aus. Vielen Dank. Gibt es eine Möglichkeit, dies aus einer einzigen Tabelle zu tun, ohne eine neue Tabelle mit den Daten "call_start" erstellen zu müssen? – gus

+0

Alles, was ich ohne die Temp-Tabelle zu tun versuchte, funktionierte nicht oder war immens komplizierter. – Lucky