|
|
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Есть БД с телефонными звонками, формат вкратце такой: Код: plaintext 1. колонок где время и продолжительность - time Я могу посчитать время начала звонка - это разница между концом и продолжительностью.... - я получу период - со скольки до скольки был звонок. А вот как потом найти пересечения.... Щас подумываю над вариантом тупого перебора (7000 записей - не так много). Но это же неправильно.... MySQL4.0 - но это тестовая машина .можно 4.1 или 5 накатить, если надо будет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 18:30:38 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Если нужна просто идея\алгоритм, то на MS SQL будет примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 21:37:02 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
ничерта я непонял из вышеприведённого.... Это на просто прихоть - щас собираемся менять провайдера, за этим я и собрал статиттику по звонкам из АТС, затем в БД и загнал. По часам суток, по числу звонков - куда сколько во сколько по сколько я проанализировал. А вот максимальное число одновременных звонков по IP телефонии никак не могу вытащить - а это надо знать чтобы сказать начальству - сколько нам линий надо подключать :( Я знаю примерно - 2 и больше. Но я могу ошибаться.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 21:56:08 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Дай SHOW CREATE TABLE соответствующей таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2005, 22:14:06 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
по моему проще написать скажем на перле небольшую програмку, засосать в память всю базу (типа временную таблицу с engine=memory) и сделать цикл по секундам и в каждую секунду смотреть count(*) где from_unixtime(значение) between дата_начала_звонка and дата_завершения_звонка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 03:29:44 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 2 Хрен - сам с такой мыслью сижу. но там статистика за месяц - как бы у него неделя не ушла на перебор тупой посекундно :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 08:54:16 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
наверно пояснить надо: call_unic_id - ничего не значащая графа, только для привязки точной call_date - число когда было окончание звонка call_time - время окончания звонка int_number - внутренний номер абонента ext_line - номер внешней линии provider - провайдер через которого звонок был (по этому поводу я и развивиал дискуссию в форуме по линуху :)), CORBINA - просто звонок по городу, или через обычную "восьмёрку", MULTIKOM - та самая IP телефония которую и надо посчитать одновременно, NONE - звонок входящий call_duration - продолжительность разговора sostoyanie - всякая техническая лабуда, типа был ли трансфер для звонка и прочее. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 09:00:09 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Идея простая (для того, чтобы отрезки пересекались нужно чтобы начало первого было не больше конца второго и конец первого был не меньше начала второго), но за преобразованием даты в удобный мне формат теряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 11:04:54 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Хотя нет, врёт мой запрос( Если кто-то висел на телефоне час, и за это время 50 раз по 1 минуте звонили -- он выдаст 51 параллельный звонок( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 11:07:15 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
неважно. Запустил уже. 20 минут уже шуршит. Жду результатов :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 12:10:31 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
авторневажно. Запустил уже. 20 минут уже шуршит. Жду результатов :) гы-гы. А смысл? ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 12:42:28 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
после 10 минут ожидания - стало принципиально интересно что он выведет. Я в конце лимит 15 сделал... Тоже из интерресу :) А пока думаю и вникаю. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 13:00:27 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
вообще - у меня самые сложные запросы по 2-х милионной БД занимали 3-5 секунд.... А тут 7 тыщщ и столько времени :) Да и давно хотел на серваке какой-нить cpuburn запустить - а тут такая возможность :) Да и результат хоть какой-то будет :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 13:01:59 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Вроде работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. выбираем максимальное, но что бы не получилось как у DocAl, берем только те которые пересекают его одним из двух способов: Код: plaintext Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 13:18:35 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
2 DocAl Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. (тока вот 4.1 MySQL соберётся...) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 13:42:07 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
lissyaraничерта я непонял из вышеприведённого.... Идея такая: количество звонков в любой момент времени может измениться только в тот момент, когда какой-то звонок начинается или заканчивается. Строим таблицу "контрольных точек" - совокупность всех моментов времёни в которые начинались или заканчивались звонки. Для 7000 звонков будет 14000 строк (по две для каждого звонка). Потом объединяем эту таблицу с таблицей звонков по принципу "контрольная точка" больше времени начала звонка и меньше времени окончания звонка. Если теперь в таком объединении посчитать количество строк для каждой контрольной точки, то получим количество звонков, происходящих в момент времени, соответствующий "контрольной точке". Извини, если что не так - трудно объяснить, но работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 14:01:37 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Ekshibarov Vladimir Смысл в следующем, для каждого интервала берем количество пересекающихся с ним, и из них выбираем максимальное, но что бы не получилось как у DocAl, берем только те которые пересекают его одним из двух способов: Код: plaintext Код: plaintext Код: plaintext Гм. Вот не понял, а в чём смысл выбирать именно такое пересечение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 20:56:58 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Долго пока не думал, но симптоматическое лечение для моего запроса -- добавить в условие что t1.`call_duration`<=t2.`call_duration`. На первый взгляд, все пересечения останутся, но считаться общая часть будет не по длинному звонку. Хотя, пожалуй, лишь не по самому длинному... Но попробуй, тебе ж краш-тест для сервера нужен был) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 21:07:47 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
он досчитал на работе. Я по загрузке ЦП вижу. А результат увижу только завтра.... Кстати даже с последним дополнением твой запрос выдаёт слишком большое число - 7. Получается у нас все линии заняты в этот момент. Неверю.... Я прогнозирую 3-4... Ну 5 - максимум вообще. Но не 7.... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 21:52:50 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
ПО идее, при указанном уточнении условия запрос считает пересечения с самым коротким из параллельных звонков. Так вот сразу не вижу, где он может обсчитаться... А насчёт верю-не верю -- запрос же выдаёт id звонка, для которого он это насчитал, посмотри) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2005, 22:06:41 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
DocAlДолго пока не думал, но симптоматическое лечение для моего запроса -- добавить в условие что t1.`call_duration`<=t2.`call_duration`. На первый взгляд, все пересечения останутся, но считаться общая часть будет не по длинному звонку. Хотя, пожалуй, лишь не по самому длинному... Но попробуй, тебе ж краш-тест для сервера нужен был) У тебя для пересечения вида: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2005, 06:44:41 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Да, согласен... Ок, если так, то можно добавить в таблицу 2592000 записей фейковых звонков длительностью в одну секунду на каждую секунду месяца, тогда всё пересечётся как надо, но боюсь, выйдет быстрее все звонки отрисовать на миллиметровке и подсчитать вручную) Причём быстрее на порядки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2005, 07:57:38 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Мой запрос должен работать, он отбрасывает пересечения вида Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2005, 08:43:24 |
|
||
|
запрос на пересекающееся время
|
|||
|---|---|---|---|
|
#18+
Всё. Всем спасибо. Итого получилось 4. Теперь буду сидеть и вникать в те запросы что были, и в то о чём тут шла беседа в 4-х последних сообщениях.... Абстракционизьм какой-то рисовали :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2005, 09:20:57 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33281235&tid=1853650]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 369ms |

| 0 / 0 |
