Adrian85 Posted June 24, 2016 #1 Share Posted June 24, 2016 Hallo Zusammen, Ich möchte gerne wissen ob ich aus der CDR Datenbank die Maximale gleichzeitige Genutze Kanäle in einem Zeitraum gebraucht habe herauslesen kann? Ich zeiche seti 6 Jahren dir CDR auf. Hat jemanden eine SQL Query die dies hervoheben kann? Freundliche Grüsse Adrian Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 21, 2016 #2 Share Posted August 21, 2016 Hallo Adrian, grundsätzlich sind die Daten für eine solche Analyse vorhanden, da in den CDRs ja alle Verbindungen protokolliert werden. Ich habe allerdings Zweifel, dass man das mit einer einfachen SQL Abfrage hinbekommt. Man muss in regelmässigen zeitlichen Schritten (z.B. im Minuten Takt) die jeweilige Anzahl der externen Verbindungen ermitteln. Wenn ich das zu implemtieren hätte würde ich mir eine zusätzliche Tabelle anlegen, in der ich pro Zeitraum die ermittelten belegten Kanäle speichere. Mit einem kleinen Skript würde ich in einer Schleife in Minuten-Schritten eine Abfrage gegen die CDR Datenbank starten. Ich habe gerade keine solche Datenbank zur Hand (daher auch keine konkreten Feldnamen), aber granz grundsätzlich könnte eine solche in etwa so aussehen: declare @start dateime declare @end datetime set @start = '2016-08-21 15:24:00' set @end = '2016-08-21 15:24:49' select count(*) as used_channels from CDRs where ( left(calling_party_number, 1) = '+' or left(calling_party_number, 3) = 'sip' ) and call_started <= @end and call_ended >= @start Wie gesagt, da müssen auf alle Fälle die Feldnamen angepasst werden. Link to comment Share on other sites More sharing options...
Adrian85 Posted August 22, 2016 Author #3 Share Posted August 22, 2016 Hi Tom, Ich hatte voll vergessen dass ich die Lösung hatte. Aber hier mein weg. PHP und SQL kombiniert. <?PHP header( 'Content-type: text/html; charset=utf-8' ); echo "<html><body>"; $start = microtime(true); $startTime = strtotime( '2010-01-01 12:00' ); $endTime = strtotime( '2016-12-31 12:00' ); echo $startTime; echo "<br/>"; echo $endTime; echo "<br/>"; echo "<br/>"; // DB Verbinden $hostname = "xxxx"; // SQL SERVERNAME/IP ADDRESS $user = "xxxx"; // SQL USERNAME $password = 'xxxxx'; // SQL PASSWORD $database = "CDR"; //DATABASENAME mssql_connect($hostname, $user, $password); mssql_select_db($database); //echo "<table border=1 cellspacing=0 cellpadding=0 ><tr><td>Date</td><td>SQL</td><td>Max</td></tr>"; echo "<table border=1 cellspacing=0 cellpadding=0 ><tr><td>Date</td><td>Max</td></tr>"; // Loop between timestamps, 24 hours at a time for ( $i = $startTime; $i <= $endTime; $i = $i + 86400 ) { $thisDate = date( 'Y-m-d', $i ); // 2015-05-01, 2010-05-02, etc $sql = " WITH C1 AS ( SELECT starttime AS ts, +1 AS TYPE, ROW_NUMBER() OVER(ORDER BY starttime) AS start_ordinal FROM IpPbxCDR where ((starttime between convert(datetime,'".$thisDate." 00:00:00', 120) and convert(datetime,'".$thisDate." 23:59:59', 120))) AND (OriginationDevice <> '' OR DestinationDevice <> '') UNION ALL SELECT endtime, -1, NULL FROM IpPbxCDR where ((starttime between convert(datetime,'".$thisDate." 00:00:00', 120) and convert(datetime,'".$thisDate." 23:59:59', 120))) AND (OriginationDevice <> '' OR DestinationDevice <> '') ), C2 AS ( SELECT *, ROW_NUMBER() OVER( ORDER BY ts, TYPE) AS start_or_end_ordinal FROM C1 ) /*Select * from C2*/ SELECT MAX(2 * start_ordinal - start_or_end_ordinal) AS mx FROM C2 WHERE TYPE = 1 "; $result = mssql_query($sql); //echo "<tr><td>".$thisDate."</td><td>".$sql."</td><td>"; echo "<tr><td>".$thisDate."</td><td>"; $value = mssql_fetch_assoc($result); echo $value['mx']; echo "</td></tr>"; } echo "</table>"; echo "<br/>"; echo "<br/>"; $total = microtime(true) - $start; echo "Execution time:".$total; echo "</body></html>"; ?> Vielleicht hilft das. Gruss Link to comment Share on other sites More sharing options...
Tom Wellige Posted August 23, 2016 #4 Share Posted August 23, 2016 Coole Sache! Danke für's posten. Ich bin mir sicher, dass andere damit auch etwas anfangen können Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.