Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Недавно начал работать с базами данных, в данном случае IBase. Необходимо из базы данных вывести информацию о исходящих NumberIOrig и входящих NumberOOrig номерах абонентов, а также дату-время звонка TimeB и время длительности разговора TimeConn в секундах. Мне надо выбрать из таблицы DINAR базы 4 поля и вывести их в элемент управления, но отсечь повторы по 3 полям NumberIOrig, TimeB, TimeConn. Рабочий запрос был такого вида: SELECT DISTINCT NumberIOrig, NumberOOrig, TimeB, TimeConn FROM DINAR WHERE (TimeB BETWEEN ..... AND .......) ORDER BY TimeB ASC; В таком виде DISTINCT отсекает повторы по всем 4 полям, а мне нужно только по 3, а получать значения всех 4 полей. Помогите сформировать запрос по такому вопросу... Очень буду признателен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 01:24 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
GROUP BY и реши в какую агрегатную функцию обернуть четвёртое поле. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 01:54 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYanky, Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 10:00 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYanky, Что-то не очень понятно, что ты хочешь увидеть в четвертом поле. Ты бы привел пример заполнения таблицы и чего хочешь увидеть в результате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 10:10 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Еще раз опишу проблему. Есть АТС под которую я написал програмку на С++, вытаскивающую нужную статистику по всем номерам, только входящим, только исходящим, по разным категориям абонентов и т.д., подсчитывая общую длительность соединений в секундах и т.д., найбольшую нагрузку... Из базы IBase я вытаскиваю номера исходящего абонента NumberIOrig, входящего NumberOOrig, время и дату TimeB, длительность соединения TimeConn. Но в АТС есть два управляющих модуля, и они бывают делают двойные записи в базу об одном и томже звонке, т.е. записи в которых NumberIOrig, NumberOOrig, TimeB, TimeConn одинаковые. Первоначально мой запрос в программе был такого типа: SELECT DISTINCT NumberIOrig, NumberOOrig, TimeB, TimeConn FROM DINAR WHERE (TimeB BETWEEN ..... AND .......) ORDER BY TimeB ASC; В таком виде DISTINCT отсекает повторы по всем 4 полям, и мне надо было получать значения всех 4 полей. Это меня устраивало. Но оказалось что эти два модуля управления АТС еще иногда вносят в базу две записи про один и тот же звонок, которые отличаются только значениями поля дата-время (в базе хранится в формате времени Unix) на одну секунду - я это показал в прикрепленном файле. Т.е. если я буду использовать предыдущий запрос, то эти записи будут дальше вылазить, а мне тоже надо их отсечь. Вот я и прошу помощи! Можно ли отсечь эти ненужные записи средствами SQL, а не возится и решать эту проблему на С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:06 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYanky, я бы отсекал эти записи триггером на этапе вливки данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:18 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYanky, Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:19 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгений, Спасибо, буду пробовать предложенные варианты. Про результаты сообщу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:22 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
rstrelba, К сожалению на этапе вливки данных я ничего не могу делать, есть определенные ограничения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:24 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYankyПро результаты сообщу... Думаешь, они кого-то интересуют?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:35 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Спасибо и за Ваш ответ Dimitry Sibiryakov ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:38 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYankyв АТС есть два управляющих модуля, и они бывают делают двойные записи в базу об одном и томже звонке, т.е. записи в которых NumberIOrig, NumberOOrig, TimeB, TimeConn одинаковые. <...> оказалось что эти два модуля управления АТС еще иногда вносят в базу две записи про один и тот же звонок, которые отличаются только значениями поля дата-время (в базе хранится в формате времени Unix) на одну секундуЕсли можете создать на этой таблице индекс по полям NumberIOrig, NumberOOrig, TimeB, то что-то типа этого не прокатит ? Код: sql 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. IDN_INCN_OUTDTS_BC_TIME366049009.01.2015 21:02.30.0004666077009.01.2015 21:02.42.0005766049011.02.2015 11:02.28.0001866049011.02.2015 11:03.30.0001966077011.02.2015 11:04.40.00011066077011.02.2015 11:05.42.0001 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2015, 22:57 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгений, Сделал как посоветовали: SELECT NumberIOrig, NumberOOrig, TimeConn, min(TimeB) FROM DINAR WHERE (TimeB BETWEEN .... AND ...) GROUP BY NumberIOrig, NumberOOrig, TimeConn ORDER BY TimeB ASC В результате повторы убрало, в том числе и те где разница по времени в 1 секунду, но..... Но кроме того убрало из вывода и достаточно много полезных данных, которые повторами не являются... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 00:21 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
AlexYankyНо кроме того убрало из вывода и достаточно много полезных данных, которые повторами не являются... Тогда определись с критерием что является повтором. Если отклонение в 1 секунду, то можно сделать округление времени через какую-либо UDF В этом примере обрезаем секунды (не округляем): Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 10:36 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгений, ты что не понимаешь что свои запросом ты оставляешь только самый ранний из диапазона по времени звонок Васи к Пете с совпадающей продолжительностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:15 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
rstrelba, Последним запросом я оставил все звонки с совпадающими Васей, Петей, Продолжительностью и Минутой_ начала_звонка (четвертое поле для группировки) Код: sql 1. Но здесь кроется 2 проблемы: 1) 2 различных звонка одинаковой длительности за 1 минуту обрежутся (первый звонок 16:30:05 и следующий 16:30:35, оба по 10 секунд), да покажется один 2) Дубликаты один из которых записался 16:30:00, а второй 16:29:59 будут показаны как 2 звонка Я предложил ТС определить критерий одинаковости звонков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 15:49 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Шавлюк Евгений, Ну а время перевести в integer и по нему уже группировать? Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:20 |
|
||
|
Помогите построить запрос по DISTINCT
|
|||
|---|---|---|---|
|
#18+
Хочу еще показать ТС что длительность звонков тоже может отличаться на 1 секунду. На примере это следующие 2 звонка после выделенных. Решение при помощи execute block. Сохраняем предыдущую строку, и проверяем на вхождение в предыдущий звонок по длительности. Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2015, 16:21 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38877695&tid=1563037]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
273ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 377ms |

| 0 / 0 |
