Приветствую Вас ГостьВторник, 14.05.2024, 06:30

Каталог статей


Аналог среза последних

Источник: https://infostart.ru/1c/articles/980323/

Предложенная автором форма запроса по его словам сокращает время выполнения запроса на 25 процентов.

На что обратить внимание:

  1. Надо ставить ограничение на дату по обеим таблицам, иначе потеряем данные
  2. Надо очень внимательно анализировать группируемые поля, так как при сложных запросах количество полей в группировке отличается от количество полей в выборке.
  3. не перепутать таблицы по именам :)

Тестирование показало, что данный вариант запроса не всегда отрабатывает корректно и не всегда есть выигрыш по скорости, поэтому применять надо аккуратно. 

Классический запрос аналога:

ВЫБРАТЬ
    ВложенныйЗапрос.Оборудование КАК Оборудование,
    ВложенныйЗапрос.ПоследниеПоказанияПериод КАК ПоследниеПоказанияПериод,
    ПКУ_ПоказанияСчетчиков.Значение КАК ПоследниеПоказанияЗначение
ИЗ
    (ВЫБРАТЬ
        ПКУ_ПоказанияСчетчиков.Оборудование КАК Оборудование,
        МАКСИМУМ(ПКУ_ПоказанияСчетчиков.Период) КАК ПоследниеПоказанияПериод
    ИЗ
        РегистрСведений.ПоказанияСчетчиков КАК ПКУ_ПоказанияСчетчиков
    ГДЕ
        ПКУ_ПоказанияСчетчиков.Период <= &ДатаПоказаний
    
    СГРУППИРОВАТЬ ПО
        ПКУ_ПоказанияСчетчиков.Оборудование) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСчетчиков КАК ПКУ_ПоказанияСчетчиков
        ПО ВложенныйЗапрос.Оборудование = ПКУ_ПоказанияСчетчиков.Оборудование
            И ВложенныйЗапрос.ПоследниеПоказанияПериод = ПКУ_ПоказанияСчетчиков.Период

Предложенный автором:

ВЫБРАТЬ
    ПКУ_ПоказанияСчетчиков.Значение КАК ПоследниеПоказанияЗначение,
    ПКУ_ПоказанияСчетчиков.Оборудование КАК Оборудование,
    ПКУ_ПоказанияСчетчиков.Период КАК Период
ИЗ
    РегистрСведений.ПоказанияСчетчиков КАК ПКУ_ПоказанияСчетчиков
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПоказанияСчетчиков КАК ПКУ_ПоказанияСчетчиков1
        ПО ПКУ_ПоказанияСчетчиков.Оборудование = ПКУ_ПоказанияСчетчиков1.Оборудование

ГДЕ
        ПКУ_ПоказанияСчетчиков1.Период <= &Период И
        ПКУ_ПоказанияСчетчиков.Период  <= &Период

СГРУППИРОВАТЬ ПО
    ПКУ_ПоказанияСчетчиков.Оборудование,
    ПКУ_ПоказанияСчетчиков.Значение,
    ПКУ_ПоказанияСчетчиков.Период

ИМЕЮЩИЕ
    МАКСИМУМ(ПКУ_ПоказанияСчетчиков1.Период) = ПКУ_ПоказанияСчетчиков.Период

Категория: Запросы | Добавил: leshic (29.11.2022)
Просмотров: 249 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0