MhMadHamster
@MhMadHamster

Как правильно составить сложный MySQL запрос с группировкой записей по определённым критериям?

Собственно имеется таблица вида:
calls(src, dst, start, end) и еще некоторые не значащие поля
таблица заполнена следующим образом:
src dst | start | end
1 | 2 | 1970-01-01 10:00:00 | 1970-01-01 10:05:35
1 | 3 | 1970-01-01 10:00:00 | 1970-01-01 10:03:13
1 | 1 | 1970-01-01 10:03:13 | 1970-01-01 10:05:37
2 | 5 | 1970-01-01 10:03:20 | 1970-01-01 10:04:01
1 | 3 | 1970-01-01 10:07:15 | 1970-01-01 10:08:29

соответственно src номер с которого звонят, dst добавочный номер на который звонят,
задача стоит в том, чтобы получить количество реальных звонков, то есть все записи в пределах одного промежутка start - end для одного входящего номера, должны объединяться в одну, например для приведенной выше таблицы запрос должен вывести:
src | dst | start | end
1 | 2 | 1970-01-01 10:00:00 | 1970-01-01 10:05:37
2 | 5 | 1970-01-01 10:03:20 | 1970-01-01 10:04:01
1 | 3 | 1970-01-01 10:07:15 | 1970-01-01 10:08:29

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

предполагаю что надо использовать группировку с условиями, но не совсем понятно как объединять в одну запись, записи с тем же номером-источником и временным интервалом в рамках start-end, если при этом ни start, ни end, не совпадают со значениями самой первой записи для этого звонка, к тому же этот же номер может звонить позднее и это уже будет другой звонок, возможно лучше разделить на более конкретные запросы всю задачу и работать с ними уже в php, что подскажете?
  • Вопрос задан
  • 2392 просмотра
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Т.е Вы хотите сказать что в данном примере позвонили в 10:00 на номер 2,
мгновенно?!?? его редиректнули на номер 3, в 10:03:13 редиректнули его на номер 1 и в 10:05:37 разговор закончили, а в первой записи стоит ошибочное значение?

Я бы это вытащил в PHP и разгреб там, скрипт вроде бы не очень сложный должен получиться за O(N)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы