Mysql. With recursive. Суммировать результаты запроса. Having.
Привет, давеча обнаружил что в таблице со звонками есть двойные звонки. Соответственно возникают две задачи:
1. Удалить дублирующися записи (легко),
2. Делать выборку без дублирующихся записей (легко),
3. Посчитать сумму звонков в продублированных записях. (интересно).
1 и 2 я опущу, это не интересно. А вот третий пункт делается так:
with recursive mytable as (select max(duration) from acc where time > ‘2014-08-01 00:00:00’ and srcip like ‘ip address’ and duration > 0 group by callid having count(callid) > 1) select sum(max) from mytable;
но это не включает секунды третьего звонка которые тоже есть.
создадим темповою табличку для экспериментов:
create temporary table acc2 as (select * from acc order by time desc limit 1000);
yooxy# delete from acc3 where id in (select max(id) from acc3 where time > ‘2014-08-01 00:00:00’ and srcip like ‘address’ and duration > 0 group by callid having count(callid) > 1);
DELETE 224
yooxy_1711=# delete from acc3 where id in (select max(id) from acc3 where time > ‘2014-08-01 00:00:00’ and srcip like ‘address’ and duration > 0 group by callid having count(callid) > 1);
DELETE 27
yooxy_1711=# delete from acc3 where id in (select max(id) from acc3 where time > ‘2014-08-01 00:00:00’ and srcip like ‘address’ and duration > 0 group by callid having count(callid) > 1);
DELETE 0.
правда это вручную, зато все под контролем. ну и удалим таблицу.
drop table acc2.
| Posted in SQL запросы, Готовые решения | No Comments »