![]() |
|
Как оптимизировать запрос? | ☑ | ||
---|---|---|---|---|
0
Ильф
21.05.25
✎
12:07
|
ВЫБРАТЬ
ФедеральныеВебСервисыЭМД.Ссылка КАК Ссылка, ФедеральныеВебСервисыЭМД.Пациент КАК Пациент, ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы КАК ДокументИнформационнойБазы, ФедеральныеВебСервисыЭМД.ТипРЭМД КАК ТипРЭМД, ФедеральныеВебСервисыЭМД.Отправить КАК Отправить ИЗ втОсновная КАК ФедеральныеВебСервисыЭМД ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМДБудущее ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента) И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) ГДЕ ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторСообщения ЕСТЬ NULL пока сам не понял смысл вроде как убирают записи у которых есть две и более записей в РС ФедеральныеВебСервисыСообщенияРЭМД |
|||
1
Ильф
21.05.25
✎
12:07
|
запрос 10 минут выполняется
|
|||
2
Волшебник
21.05.25
✎
12:08
|
Не пользуйтесь временными таблицами
|
|||
3
Ильф
21.05.25
✎
12:11
|
не - ВТ - это уже "оптимизация" изначально запрос в один заход выполняется 15 минут
|
|||
4
Fish
гуру
21.05.25
✎
12:22
|
(1) А почему ты решил, что нужно оптимизировать именно этот кусок запроса?
Именно он выполняется 10 минут, а остальные ВТ - за секунду? |
|||
5
laeg
21.05.25
✎
12:23
|
Индексированные поля в таблице втОсновная ? Строк там сколько миллионов ?
|
|||
6
Ильф
21.05.25
✎
12:24
|
(4) да
|
|||
7
Ильф
21.05.25
✎
12:24
|
(5) один
|
|||
8
Ильф
21.05.25
✎
12:26
|
насколько понимаю - ловят записи которые не имеют "вторых" И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения)
|
|||
9
Fish
гуру
21.05.25
✎
12:26
|
(6) ДатаСообщения - это индексированное поле РС?
|
|||
10
Ильф
21.05.25
✎
12:28
|
при этом не "фильтруются обработанные" - т.е. исторические данные накапливаются и все время в запросе участвуют
через год получим 30 минут на запрос, а то и в геометрической надо переделывать структуру хранения |
|||
11
Ильф
21.05.25
✎
12:29
|
идентификатор и дата - да
ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента) И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) вот эти поля в РС индексированы проиндексировал их в ВТ - похоже толку ноль |
|||
12
RomanYS
21.05.25
✎
12:35
|
(0) Это же просто срез.
Получи в отдельную таблицу максимальные даты, а потом внутреннее соединение с ней по документу и дате |
|||
13
RomanYS
21.05.25
✎
12:37
|
(10) "надо переделывать структуру хранения"
ага, периодический регистр сведений и ДатаСообщения в Период. Тогда этот запрос можно просто на срезпоследних заменить |
|||
14
Ильф
21.05.25
✎
12:37
|
||||
15
Ильф
21.05.25
✎
12:38
|
(12) не понял
|
|||
16
Мультук
гуру
21.05.25
✎
12:39
|
(0)
1) Вы хотя бы структуру РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД показали. Скриншот или еще что. 2) Сделайте отбор по одному пациенту и посмотрите "а что и как" Не обязательно ворочать СРАЗУ миллионами |
|||
17
Ильф
21.05.25
✎
12:41
|
(16) по одному мгновенно
|
|||
18
Fish
гуру
21.05.25
✎
12:41
|
(10) Вроде не накапливаются. Ты же отсекаешь все записи, у которых есть запись с датой больше.
Другими словами по каждому ИдентификаторСообщения выберется последняя запись, которая не имеет записи с датойсообщения больше. А-ля срез последних |
|||
19
Ильф
21.05.25
✎
12:41
|
просто ГДЕ Пациент = &Пациент добавляю на основную таблицу
|
|||
20
Fish
гуру
21.05.25
✎
12:44
|
(19) Попробуй переделать на одно соединение с подзапросои по дате:
первое условие по ид, а второе - И ДатаСообщения в (выбрать максимум(датасообщения) из .....) |
|||
21
Ильф
21.05.25
✎
12:45
|
(18) тоже не понял
есть РС непериодический ИдентификаторСообщения (строка) измерение ИдентификаторДокумента (строка индекс) реквизит ДатаСообщения (дата время индекс) реквизит выбираются документы у которых нет "второго" сообщения (насколько я понял) |
|||
22
Fish
гуру
21.05.25
✎
12:47
|
(21) Т.е. аналог среза последних. Т.к. только последний по дате идентификатор не будет иметь дату сообщения больше.
|
|||
23
Ильф
21.05.25
✎
12:50
|
(22) нет
если в РС две записи - они нам не нужны нужны только когда одна запись |
|||
24
Ильф
21.05.25
✎
12:51
|
Мама мыла раму 01/05
Мама мыла раму 10/05 Папа мыл раму 01/01 Нужен только папа ща дам "типовой запрос" ... |
|||
25
H A D G E H O G s
21.05.25
✎
12:52
|
Скинь dtшник на liveups@yandex.ru с описанием, как воспроизвести, посмотрю.
Все остальное - гадание на кофейной гуще. |
|||
26
laeg
21.05.25
✎
12:54
|
Можно попробовать еще одно ВТ сделать, с максимальными датами по идентификатору, потом испозьуя эту ВТ получить полные данные
Вопрос: А зачем срез последних, если в запросе нет выборки из этого РС ? |
|||
27
Ильф
21.05.25
✎
12:55
|
ВЫБРАТЬ
ФедеральныеВебСервисыЭМД.Ссылка КАК Ссылка, ФедеральныеВебСервисыЭМД.Пациент КАК Пациент, ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы КАК ДокументИнформационнойБазы, ФедеральныеВебСервисыЭМД.ТипРЭМД КАК ТипРЭМД, ФедеральныеВебСервисыЭМД.Отправить КАК Отправить ИЗ Справочник.ФедеральныеВебСервисыЭМД КАК ФедеральныеВебСервисыЭМД ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Картотека КАК СправочникКартотека ПО (ФедеральныеВебСервисыЭМД.Пациент = СправочникКартотека.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТипыМДРегистрируемыхВРЭМД КАК ТипыРЭМД ПО (ФедеральныеВебСервисыЭМД.ТипРЭМД = ТипыРЭМД.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМДБудущее ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента) И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтложенноеПодписаниеЭП КАК ОтложенноеПодписаниеЭП ПО (ФедеральныеВебСервисыЭМД.Ссылка = ОтложенноеПодписаниеЭП.ПодписываемыйОбъект) ЛЕВОЕ СОЕДИНЕНИЕ Документ.МедицинскийДокумент.CDAДокументы КАК CDAДокументы ПО (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Документ.МедицинскийДокумент) И (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы = CDAДокументы.Ссылка) И (CDAДокументы.НомерСтроки = 1) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыМедицинскихДокументов КАК СтатусыМедицинскихДокументов ПО (CDAДокументы.Ссылка = СтатусыМедицинскихДокументов.МедицинскийДокумент) И (CDAДокументы.ТелоМедДокумента = СтатусыМедицинскихДокументов.ТелоМедДокумента) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыМедицинскихДокументов КАК СтатусыМедицинскихДокументовФайлы ПО (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Справочник.Файлы) И (ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы = СтатусыМедицинскихДокументовФайлы.ТелоМедДокумента) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФедеральныеВебСервисыЭМД.ЭлектронныеПодписиЭМД КАК ПодписьМО ПО (ФедеральныеВебСервисыЭМД.Ссылка = ПодписьМО.Ссылка) И (ПодписьМО.ЭтоПодписьМО = ИСТИНА) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФедеральныеВебСервисыЭМД.ЭлектронныеПодписиЭМД КАК ПодписьМОЕщеОдна ПО (ПодписьМО.Ссылка = ПодписьМОЕщеОдна.Ссылка) И (ПодписьМОЕщеОдна.ЭтоПодписьМО = ИСТИНА) И (ПодписьМОЕщеОдна.НомерСтроки > ПодписьМО.НомерСтроки) ГДЕ ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы <> НЕОПРЕДЕЛЕНО И СправочникКартотека.ПометкаУдаления = ЛОЖЬ И ФедеральныеВебСервисыЭМД.ПометкаУдаления = ЛОЖЬ И ФедеральныеВебСервисыЭМД.ВнешнийДокумент = ЛОЖЬ И ФедеральныеВебСервисыЭМД.ВАрхиве = ЛОЖЬ И ВЫБОР КОГДА &ИспользуетсяРегион ТОГДА ИСТИНА КОГДА ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ИСТИНА КОГДА ТипыРЭМД.Ссылка ЕСТЬ NULL ТОГДА ИСТИНА КОГДА (ТипыРЭМД.ДатаНачалаРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента >= ТипыРЭМД.ДатаНачалаРегистрации) И (ТипыРЭМД.ДатаОкончанияРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента <= ТипыРЭМД.ДатаОкончанияРегистрации) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ И ВЫБОР КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Документ.МедицинскийДокумент ТОГДА СтатусыМедицинскихДокументов.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов) КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Справочник.Файлы ТОГДА СтатусыМедицинскихДокументовФайлы.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов) ИНАЧЕ ИСТИНА КОНЕЦ И ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторСообщения ЕСТЬ NULL И ПодписьМОЕщеОдна.НомерСтроки ЕСТЬ NULL И ОтложенноеПодписаниеЭП.ПодписываемыйОбъект ЕСТЬ NULL И (ФедеральныеВебСервисыЭМД.Отправить = ИСТИНА ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = "" ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА) И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ И ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента ЕСТЬ NULL И ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки = "" И (ЕСТЬNULL(ТипыРЭМД.НеобходимаПодписьМО, ЛОЖЬ) = ЛОЖЬ ИЛИ НЕ ПодписьМО.НомерСтроки ЕСТЬ NULL) ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = "" ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА) И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ И НЕ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Unmarshalling Error%" И (ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RMIS_FAULT%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 500%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 502%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 503%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 403%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 404%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Код ответа 408%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Ошибка подключения.%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%Ошибка работы с Интернет%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%превышен лимит запросов к сервису%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RATE_LIMIT%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RMIS_LIMIT_FAULT%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%RMIS_REGISTERDOCUMENT_PARSING_FAULT%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%INTERNAL_ERROR%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%GW-005%" ИЛИ ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки ПОДОБНО "%GW-007%") ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = "" ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА) И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ И (ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%RUNTIME_ERROR%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%CA_INACCESSIBILITY%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%ASYNC_RESPONSE_TIMEOUT%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%SCHEMA_PROCESSING_ERROR%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Внутренняя ошибка валидации СЭМД%" И НЕ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Код = 'VALIDATION_ERROR'%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%GET_DOCUMENT_FILE_ERROR%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Ошибка работы с Интернет%" ИЛИ ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "%Ошибка получения файла ЭМД из файлового хранилища%") И ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки = "" ИЛИ (ФедеральныеВебСервисыЭМД.emdrId = "" ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА) И ФедеральныеВебСервисыЭМД.БезРегистрацииВРЭМД = ЛОЖЬ И НЕ ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения ЕСТЬ NULL И ФедеральныеВебСервисыСообщенияРЭМД.ДатаОтвета = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И ФедеральныеВебСервисыСообщенияРЭМД.СообщениеУспешноОтправлено = ИСТИНА И ДОБАВИТЬКДАТЕ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения, ДЕНЬ, 2) < &ТекущийДень И ФедеральныеВебСервисыЭМД.ТекстПоследнейОшибки = "" И ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "" ИЛИ ФедеральныеВебСервисыЭМД.ОбновитьДанныеДокументаВРЭМД = ИСТИНА И ФедеральныеВебСервисыСообщенияРЭМД.ДатаОтвета <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И ФедеральныеВебСервисыСообщенияРЭМД.ТекстОшибки ПОДОБНО "" И (ЕСТЬNULL(ТипыРЭМД.НеобходимаПодписьМО, ЛОЖЬ) = ЛОЖЬ ИЛИ НЕ ПодписьМО.НомерСтроки ЕСТЬ NULL)) |
|||
28
Ильф
21.05.25
✎
12:56
|
(25) ты знаешь какие сейчас штрафы по 152 ФЗ? насмешил
|
|||
29
laeg
21.05.25
✎
12:57
|
(24) а зачем в обще такой геморой ? Когда нужна только одна запись ?
|
|||
30
Ильф
21.05.25
✎
12:57
|
(25) но буду иметь в виду,
|
|||
31
Ильф
21.05.25
✎
12:57
|
(29) - их нужно 200
|
|||
32
laeg
21.05.25
✎
13:00
|
в (24) ты явно написал, что нужны только те записи, которых по идентификатору не больше ОДНОГО ? (то есть маму не берем, берем папу)
так и сделать условие ГДЕ Количество(Идентификатор) = 1 |
|||
33
Ильф
21.05.25
✎
13:02
|
(32) ... это я предположил из того что увидел в запросе
но как вариант (а вдруг даты совпадут ? тогда не прокатит) |
|||
34
Fragster
гуру
21.05.25
✎
13:05
|
а почему не количество различные и одно соединение?
|
|||
35
Fragster
гуру
21.05.25
✎
13:05
|
или даже 0 соединений?
|
|||
36
Ильф
21.05.25
✎
13:07
|
https://disk.yandex.ru/d/JUZjKPXfXBDFqw
наверное так... надо привести к изначальному, посмотреть что выдает |
|||
37
Ильф
21.05.25
✎
13:08
|
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ФедеральныеВебСервисыЭМД.Ссылка КАК Ссылка, ФедеральныеВебСервисыЭМД.ИдентификаторДокумента КАК ИдентификаторДокумента, ФедеральныеВебСервисыЭМД.Пациент КАК Пациент, ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы КАК ДокументИнформационнойБазы, ФедеральныеВебСервисыЭМД.ТипРЭМД КАК ТипРЭМД, ФедеральныеВебСервисыЭМД.Отправить КАК Отправить, МИНИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) КАК ДатаСообщения, МАКСИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) КАК ДатаСообщения1 ПОМЕСТИТЬ втПервая ИЗ втОсновная КАК ФедеральныеВебСервисыЭМД ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента) СГРУППИРОВАТЬ ПО ФедеральныеВебСервисыЭМД.Ссылка, ФедеральныеВебСервисыЭМД.ИдентификаторДокумента, ФедеральныеВебСервисыЭМД.Пациент, ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы, ФедеральныеВебСервисыЭМД.ТипРЭМД, ФедеральныеВебСервисыЭМД.Отправить ИМЕЮЩИЕ МИНИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) = МАКСИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) |
|||
38
Ильф
21.05.25
✎
13:22
|
но даже если ... исторические данные, надо как-то исключать
что бы вот сразу - "отправлено" - идите вна |
|||
39
Ильф
21.05.25
✎
13:37
|
||||
40
Ильф
21.05.25
✎
13:40
|
ПО (ФедеральныеВебСервисыЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМДБудущее ПО (ФедеральныеВебСервисыСообщенияРЭМД.ИдентификаторДокумента = ФедеральныеВебСервисыСообщенияРЭМДБудущее.ИдентификаторДокумента) И (ФедеральныеВебСервисыСообщенияРЭМДБудущее.ДатаСообщения > ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) убрал соединение добавил группировку и условие ИМЕЮЩИЕ МИНИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) = МАКСИМУМ(ФедеральныеВебСервисыСообщенияРЭМД.ДатаСообщения) а разница в количестве записей существенная |
|||
41
Fish
гуру
21.05.25
✎
13:46
|
(23) А ты проверь. Найди пациента, у которого 2 записи, и выполни запрос по нему.
|
|||
42
Garykom
гуру
21.05.25
✎
13:51
|
Юмористически правила:
1. Не пользуйтесь временными таблицами 2. Никогда не используете краткие имена/алиасы таблиц после КАК 3. Никогда не используйте РАЗЛИЧНЫЕ 4. Никогда не обрабатывайте разные случаи (например есть дублирование или нет) отдельно через ОБЪЕДИНИТЬ 5. .. |
|||
43
DrZombi
гуру
22.05.25
✎
06:45
|
(0) Как-то так....
1. В таблицу "втОсновная" добавить поле "ДатаСообщения" коль оно вам там нужно 2. После можно убрать соединение "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФедеральныеВебСервисыСообщенияРЭМД КАК ФедеральныеВебСервисыСообщенияРЭМД" |
|||
44
DrZombi
гуру
22.05.25
✎
06:49
|
(40) Порой для оптимизации чего-то важного, пишут еще один регистр, который хранит это важное в готовом варианте :)
Пример ЗУП 3.1 и расчет среднего, расчет некоторых показателей выполняется заранее, еще до вызова расчета среднего :) |
|||
45
DrZombi
гуру
22.05.25
✎
06:55
|
(27) Вот эту конструкцию убирай из условия ГДЕ!!!
Либо переписывай на условия ИЛИ, либо пиши через еще одну временную таблицу, куда ты поместишь эту конструкцию в Поле. После уже в следующем вызове своей таблицы, уже используешь поле в ГДЕ... Вот такая порой бывает оптимизация ;) ///Вот это бяка в запроса, на момент перехода На ПосгриСКЛ (и не только) И ВЫБОР КОГДА &ИспользуетсяРегион ТОГДА ИСТИНА КОГДА ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ИСТИНА КОГДА ТипыРЭМД.Ссылка ЕСТЬ NULL ТОГДА ИСТИНА КОГДА (ТипыРЭМД.ДатаНачалаРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента >= ТипыРЭМД.ДатаНачалаРегистрации) И (ТипыРЭМД.ДатаОкончанияРегистрации = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ИЛИ ФедеральныеВебСервисыЭМД.ДатаСозданияДокумента <= ТипыРЭМД.ДатаОкончанияРегистрации) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ |
|||
46
DrZombi
гуру
22.05.25
✎
06:59
|
+ (27) И эту гадость из ГДЕ, переписывай :)
И ВЫБОР КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Документ.МедицинскийДокумент ТОГДА СтатусыМедицинскихДокументов.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов) КОГДА ФедеральныеВебСервисыЭМД.ДокументИнформационнойБазы ССЫЛКА Справочник.Файлы ТОГДА СтатусыМедицинскихДокументовФайлы.СтатусТелаДокумента = ЗНАЧЕНИЕ(Перечисление.СтатусыМедицинскихДокументов.Готов) ИНАЧЕ ИСТИНА КОНЕЦ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |