LINUX.ORG.RU

MySQL запрос к Asterisk


1

1

Приветствую, подскажите. Задача: выяснить в максимальное количество одновременных звонков в астериске на сентябрь. Для этого нужно разделить месяц на периоды в 10 секунд и посчитать количество выводимых строк со статусом ANSWERED. К примеру:

SELECT COUNT(*) FROM `cdr` WHERE `calldate` BETWEEN '2014-09-01 00:00:00' AND '2014-09-01 00:00:10' AND `disposition` = "ANSWERED"
Но, не могу же я считать каждые 10 секунд, это получится 259200 запросов.

Подскажите как упросить?



Последнее исправление: mkondratev (всего исправлений: 1)

Ответ на: комментарий от mkondratev

Факт, колонка calldate содержит записи типа 2013-12-24 08:01:27

Отнюдь. Тебе так кажется. На самом деле это штамп времени.

ziemin ★★
()
Ответ на: комментарий от ziemin
mysql> show create table cdr;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| cdr   | CREATE TABLE `cdr` (
  `calldate` datetime NOT NULL default '0000-00-00 00:00:00',
  `clid` varchar(80) NOT NULL default '',
  `src` varchar(80) NOT NULL default '',
  `dst` varchar(80) NOT NULL default '',
  `dcontext` varchar(80) NOT NULL default '',
  `channel` varchar(80) NOT NULL default '',
  `dstchannel` varchar(80) NOT NULL default '',
  `lastapp` varchar(80) NOT NULL default '',
  `lastdata` varchar(80) NOT NULL default '',
  `duration` int(11) NOT NULL default '0',
  `billsec` int(11) NOT NULL default '0',
  `disposition` varchar(45) NOT NULL default '',
  `amaflags` int(11) NOT NULL default '0',
  `accountcode` varchar(20) NOT NULL default '',
  `uniqueid` varchar(32) NOT NULL default '',
  `userfield` varchar(255) NOT NULL default '',
  `recordingfile` varchar(255) NOT NULL default '',
  `cnum` varchar(40) NOT NULL default '',
  `cnam` varchar(40) NOT NULL default '',
  `outbound_cnum` varchar(40) NOT NULL default '',
  `outbound_cnam` varchar(40) NOT NULL default '',
  `dst_cnam` varchar(40) NOT NULL default '',
  `did` varchar(50) NOT NULL default '',
  KEY `IDX_UNIQUEID` (`uniqueid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mkondratev
() автор топика
Ответ на: комментарий от Khrustalev
 SELECT FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP(  `calldate` ) /10 ) *10 ) AS  `ts` , COUNT( * )  FROM  `cdr`  WHERE  `calldate`  BETWEEN  '2014-09-01 00:00:00' AND  '2014-09-30 23:59:59' AND  `disposition` =  "ANSWERED" AND  `duration` >0 GROUP BY  `ts`  ORDER BY COUNT( * ) DESC  LIMIT 0 , 10;
mkondratev
() автор топика
7 октября 2015 г.
Ответ на: комментарий от mkondratev

корявый алгоритм, не учитывает звонки которые уже идут больше 10 секунд

megamrak
()

Всё просто: сформируй таблицу, где ты считаешь вход звонка в момент времени за +1, а завершение звонка за -1. Тогда сумма за всё время меньшее определённого момента покажет тебе текущее количество звонков. Дальше просто считай максимальное количество по моментам времени где звонок начинается.

O02eg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.