|
Как сопоставить элементы с похожими датами | ☑ | ||
---|---|---|---|---|
0
slafor
17.03.18
✎
13:58
|
Пишу дополнения к конфигурации для отслеживания и записи телефонных звонков.
1. Есть регистр сведений "ДетализацияЗвонков" с датой и номером телефона (у него есть регистратор - документ "Звонок", который создается на основании данных из XML-файла детализации звонков, полученного от оператора связи, но это так, для общего понимания сути вопроса). 2. Есть каталог с файлами записи телефонных звонков, где у каждого файла в имени указаны дата и время звонка. Соответственно, в итоге я имею 2 таблицы - таблицу с именем файла и с датой/временем звока и таблицу регистра сведений с датами/временем в нужном периоде. Нужно совоставить одно с другим, т.е. нужно файлы загрузить в документы-регистраторы записей регистра ДетализацииЗвонков. НО! Есть небольшая проблема. Дата звонка и дата файла могут немного отличаться. Ну, скажем, +-5 секунд. Задачу я решил, но уж слишком банально - путем перебора таблицы с файлами и поиска похожих по дате/времени записей в регистре. Еще дополнительно есть возможность сравнивать длительность звонка и размер файла (не прямо, конечно, но возможность такая есть), для поиска наиболее точного соответствия. Собственно, вопрос такой: можно ли в САМОМ запросе сравнить ПОХОЖИЕ даты? |
|||
1
Cyberhawk
17.03.18
✎
14:08
|
Много букв, чо надо-то?
И желательно в виде одной картинки чтобы все было понятно. |
|||
2
slafor
17.03.18
✎
14:24
|
(1)
Если совсем просто, то есть две таблицы, и в первой и во второй есть колонка "Дата" (Дата и Время). Даты в одной таблице и даты в другой различаются на +- 5 секунд. Можно ли сопоставить строки этих двух таблиц, используя только запрос? |
|||
3
1Сергей
17.03.18
✎
14:25
|
(2) для начала попробуй вичислить разницу между датами и найти минимумы
|
|||
4
Cyberhawk
17.03.18
✎
15:58
|
(2) Это безсмысленно, т.к. поддерживать этот алгоритм в запросе сможет далеко не каждый. Делай это в коде.
|
|||
5
Sapiens_bru
17.03.18
✎
16:25
|
Формулу в соединение таблиц:
(РАЗНОСТЬДАТ(Таблица1.Дата,Таблица2.Дата,СЕКУНДА)<5 И РАЗНОСТЬДАТ(Таблица1.Дата,Таблица2.Дата,СЕКУНДА)>-5) |
|||
6
slafor
23.03.18
✎
18:57
|
(4) Наверное, лучше бы я на этом и остановился. Но попробовать в запросе очень хотелось, и я все-таки рискнул.
(5) Спасибо за подсказку. Никогда не думал, что можно соединять таблицы не просто так, по реквизитам, а на основании формул в соединениях. Не дорос, значит, до этого. В итоге у меня получился вот такой запрос: ТаблицаСоответствий = Объект.ТаблицаСоответствий.Выгрузить(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТЗ", ТаблицаСоответствий); Запрос.Текст = " |ВЫБРАТЬ ТЗ.ИмяФайла КАК ИмяФайла, ТЗ.ДатаФайла КАК ДатаФайла |ПОМЕСТИТЬ ТаблицаСоответствий |ИЗ &ТЗ КАК ТЗ |; |///////////////////////////////////////////////////////////// |ВЫБРАТЬ ТаблицаСоответствий.ИмяФайла КАК ИмяФайла, | ТаблицаСоответствий.ДатаФайла КАК ДатаФайла, | ДетализацияЗвонков.Дата КАК ДатаЗвонка, | ДетализацияЗвонков.Номер КАК НомерТелефона, | ДетализацияЗвонков.Контрагент КАК Контрагент, | ДетализацияЗвонков.ТипВызова КАК ТипВызова, | ДетализацияЗвонков.ДлительностьСтрока КАК ДлительностьСтрока, | ДетализацияЗвонков.Длительность КАК Длительность, | ДетализацияЗвонков.Регистратор КАК Регистратор |ИЗ ТаблицаСоответствий КАК ТаблицаСоответствий |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДетализацияЗвонков КАК ДетализацияЗвонков |ПО (РАЗНОСТЬДАТ(ТаблицаСоответствий.ДатаФайла,ДетализацияЗвонков.Дата,СЕКУНДА)>=-5 | И РАЗНОСТЬДАТ(ТаблицаСоответствий.ДатаФайла,ДетализацияЗвонков.Дата,СЕКУНДА)<=5) |"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл <...ну и так далее...> В итоге я: 1. Не использую множество ТЗ. 2. Не обрабатываю ненужные данные. 3. Получаю все необходимые соединения, даже если +-5 секунд это данные из разных дат. Но запрос и обработка в целом работают ровно на 1 секунду дольше! :) Может, это потому что режим работы файловый? В общем, как бы то ни было, огромное спасибо за новые познания в области написания запросов. |
|||
7
Fram
23.03.18
✎
19:16
|
(6) можно немного упростить конструкцию
РАЗНОСТЬДАТ(ТаблицаСоответствий.ДатаФайла,ДетализацияЗвонков.Дата,СЕКУНДА) МЕЖДУ -5 и 5 |
|||
8
Wern
23.03.18
✎
19:22
|
(6) Не на файловой будет еще больше разница во времени. Ты передаешь таблицу на SQL сервер, там ее обрабатываешь и возвращаешь обратно, хотя мог бы ограничиться только получением таблицы один раз и склеивать их программно вне запроса. т.е. таблица по каналам связи у тебя передается 2 раза, вместо одного. И если узкое место это канал связи, будет работать вдвое дольше.
|
|||
9
Fram
23.03.18
✎
19:41
|
(8) т.е. ты предлагаешь тащить весь РегистрСведений.ДетализацияЗвонков из базы для программной обработки?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |