четверг, 6 октября 2016 г.

Прямые выборки из базы mysql - asteriskcdrdb

Asterisk CDR select


accountcode: Какой учетный код используется: account, (строка, 20 символов)
src: Номер Caller*ID (строка, 80 символов)
dst: Направление (строка, 80 символов)
dcontext: Контекст направления (строка, 80 символов)
clid: Caller*ID с текстом (80 символов)
channel: Используемый канал (80 символов)
dstchannel: Канал направления, если подходит (80 символов)
lastapp: Последнее приложение, если подходит (80 символов)
lastdata: Дата последнего приложения (аргументы) (80 символов)
start: Начало вызова (дата/время)
answer: Ответ вызова (дата/время)
end: Конец вызова (дата/время)
duration: Полное время в системе, в секундах (целое), от набора номера до отключения
billsec: Полное время вызова, в секундах (целое), от ответа до отключения
disposition: Что случилось с вызовом: ANSWERED, NO ANSWER, BUSY, FAILED (на некоторых CDR выходных драйверах, например ODBC, они могут быть числовыми; заметьте, что более детальная инфа может быть найдена в переменной диалплана $HANGUPCAUSE)
amaflags: Какой флаг используется: смотри amaflags: DOCUMENTATION, BILLING, IGNORE и т.д., указанного для каждого канала подобно accountcode.
user field: Пользовательское поле, максимум 255 символов


Выбрать поля из таблицы по звонкам за определенный период:
select calldate,did,src,dstchannel,duration,billsec,disposition from cdr where did='DID_number' and DATE(calldate) between '2016-09-01' and '2016-09-30';

Кол-во звонков на определенный DID_number:
select count(*) from cdr where did='DID_number' and DATE(calldate) between '2016-09-01' and '2016-09-30';

--
select distinct dst from cdr where DATE(calldate) between '2016-09-01' and '2016-09-30';

Выбрать уникальные DID_number:
select distinct did from cdr where DATE(calldate) between '2016-09-01' and '2016-09-30';

Выбрать все звонки на наш DID номер и исключить из списка наши же тестовые звонки:
select calldate,did,src,dstchannel,duration,billsec,disposition from cdr where did='DID_number' and DATE(calldate) between '2016-09-01' and '2016-09-30' and src not in (select number from numbers);


Выбрать все звонки, когда мы звонили клиентам, которые звонили на определенный DID_number:
select calldate,src,dst,duration,billsec,disposition,uniqueid,recordingfile from cdr where DATE(calldate) between '2016-09-01' and '2016-09-30' and dst in (select src from cdr where did='DID_number'  and src not in (select number from numbers));


Примеры выборок из базы asteriskcdrdb для решения мелких задач:


SELECT calldate AS  "Дата звонка", did AS  "Номер дозвона", src AS  "Кто звонил", dstchannel AS  "Куда дозвонился", duration AS  "Общее время дозвона", billsec AS  "Время разговора", disposition AS "Статус ответа"
FROM cdr
WHERE did =  'DID_number'
AND DATE( calldate )
BETWEEN  '2016-09-01'
AND  '2016-09-30'
AND src NOT
IN (
SELECT number
FROM numbers
)
LIMIT 0 , 30

SELECT calldate AS  "Дата звонка", did AS  "Номер дозвона", src AS  "Кто звонил", dstchannel AS  "Куда дозвонился", duration AS  "Общее время дозвона", billsec AS  "Время разговора", disposition AS "Статус ответа" from cdr where did='DID_number' and DATE(calldate) between '2016-08-01' and '2016-08-31' and src not in (select number from numbers);

select calldate,did,src,dstchannel,duration,billsec,disposition from cdr where dst=505 and DATE(calldate) between '2016-09-01' and '2016-09-30' and src not in (select number from numbers);


Узнать количество записей в SQL-выборке
SELECT COUNT(*) FROM `table` WHERE `field_1`='value_1'
После выполнения данного запроса будет возвращён result_set, в котором будет храниться массив, содержащий элемент COUNT(*) со значением количества записей в таблице "table", где поле "field_1" имеет значение "value_1".

Узнать просто количество записей. Тогда то же самое, но без WHERE:
SELECT COUNT(*) FROM `table`

Подсчитать количество уникальных записей в таблице:
SELECT COUNT(DISTINCT `field_1`) FROM `table`



Оригиналы:
http://irockasterisk.blogspot.ru/2012/03/handy-mysql-queries-for-asterisk-cdr.html

Комментариев нет:

Отправить комментарий