powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите создать запрос
5 сообщений из 5, страница 1 из 1
Помогите создать запрос
    #39666904
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FireBird 2.5.

Имеем таблицу
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE TABTLF (
    DB_ID           INTEGER NOT NULL,
    DB_DATE         TIMESTAMP,   /*начало передачи*/
    DB_NAME         VARCHAR(12),/*имя корреспондента*/
    DB_CHANNEL      INTEGER,  /*номер канала*/
    DB_TALKTIME     INTEGER   /*длительность передачи*/
);


Таблица с данными регистрации времени и длительности передачи корреспондентов.
Проблема:
Надо выбрать тех корреспондентов, у которых совпадала длительность передачи (с точностью +-50) и время начала передачи не отличалось более чем на 10 секунд.

Пример:
DB_IDDB_DATEDB_NAMEDB_CHANNELDB_TALKTIME128.06.2018 01:00:00fuzzy71000228.06.2018 01:00:03honey3756328.06.2018 01:00:02fuzzy7758428.06.2018 01:00:21honey7852528.06.2018 01:00:28honey31021628.06.2018 01:00:25honey4565728.06.2018 01:00:17fuzzy4755828.06.2018 01:00:17fuzzy4855928.06.2018 01:00:26ginger510111028.06.2018 01:01:03ginger36551128.06.2018 01:01:13ginger57591228.06.2018 01:01:13ginger77551328.06.2018 01:01:13fuzzy75541428.06.2018 01:01:13fuzzy37581528.06.2018 01:01:38fuzzy310001628.06.2018 01:01:41bright410121728.06.2018 01:01:52bright37551828.06.2018 01:01:59bright34581928.06.2018 01:02:06bright310222028.06.2018 01:02:13ginger3888
Должно получиться:
DB_IDDB_DATEDB_NAMEDB_CHANNELDB_TALKTIME228.06.2018 01:00:03honey3756328.06.2018 01:00:02fuzzy7758428.06.2018 01:00:21honey7852528.06.2018 01:00:28honey31021828.06.2018 01:00:17fuzzy4855928.06.2018 01:00:26ginger510111128.06.2018 01:01:13ginger57591228.06.2018 01:01:13ginger77551428.06.2018 01:01:13fuzzy37581528.06.2018 01:01:38fuzzy310001628.06.2018 01:01:41bright41012

Цветом выделены совместные записи удовлетворяющие заданным условиям.

З.Ы. пример совершено искусственный, но полностью отражает проблематику задачи.
...
Рейтинг: 0 / 0
Помогите создать запрос
    #39666905
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не надо выделять получившиеся группы?
Что делать если A=B и В=С ?
...
Рейтинг: 0 / 0
Помогите создать запрос
    #39666918
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Никаких групп здесь нет.
Сравнивается только одна (ТЕКУЩАЯ запись) с остальными по двум параметрам. Если найдена хоть одна ДРУГАЯ запись с параметрами отличающимися от ТЕКУЩЕЙ на заданную точность, то ТЕКУЩАЯ запись попадает в результат и так далее.
Понятно, что и ДРУГАЯ запись тоже попадёт в результат, но в своё время когда она станет ТЕКУЩЕЙ для сравнения.

З.Ы. желательна реализация не через ХП. С ХП получается нормально, но нужен результат через запрос. Если, конечно, это возможно.
...
Рейтинг: 0 / 0
Помогите создать запрос
    #39666929
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
where exists (select 1 from TABTLF t2
                where not t1.db_id = t2.db_id
                      and abs(datediff(second from t1.db_date to t2.db_date)) <=10
                      and abs(t1.db_talktime - t2.talktime) <= 50)
...
Рейтинг: 0 / 0
Помогите создать запрос
    #39666990
abwabw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery,

ОК, СПС
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите создать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]