Имя: Пароль:
1C
 
Сравнение способов получения среза последних на каждую дату в запросе
, , , ,
0 Ненавижу 1С
 
гуру
26.01.11
13:03
1. Классический 0% (0)
2. Альтернатива 0% (0)
3. Нет ни какой разницы (оба хорошие) 0% (0)
4. Оба плохие, есть свой вариант 0% (0)
5. Мне всё равно 0% (0)
Всего мнений: 0

Какой метод быстрее?

1. Классический Книга знаний: Срез последних на каждую дату в запросе

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

УПОРЯДОЧИТЬ ПО
   ДатаДок

2. Альтернатива (с временной таблицей)

ВЫБРАТЬ
   КурсыВалют.Валюта,
   КурсыВалют.Период КАК ПериодНач,
   КурсыВалют.Курс,
   МИНИМУМ(ЕСТЬNULL(КурсыВалют1.Период, &ДатаКон)) КАК ПериодКон
ПОМЕСТИТЬ ПериодыКурсов
ИЗ
   РегистрСведений.КурсыВалют КАК КурсыВалют
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют1
       ПО КурсыВалют.Валюта = КурсыВалют1.Валюта
           И КурсыВалют.Период < КурсыВалют1.Период
ГДЕ
   КурсыВалют.Период МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
   КурсыВалют.Валюта,
   КурсыВалют.Период,
   КурсыВалют.Курс

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   КурсыВалютСрезПоследних.Валюта,
   КурсыВалютСрезПоследних.Период,
   КурсыВалютСрезПоследних.Курс,
   ЕСТЬNULL(КурсыВалютСрезПервых.Период, &ДатаКон)
ИЗ
   РегистрСведений.КурсыВалют.СрезПоследних(&ДатаНач, ) КАК КурсыВалютСрезПоследних
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПервых(&ДатаНач, ) КАК КурсыВалютСрезПервых
       ПО КурсыВалютСрезПоследних.Период <> КурсыВалютСрезПервых.Период
           И КурсыВалютСрезПоследних.Валюта = КурсыВалютСрезПервых.Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Таб1.Ссылка КАК СсылкаДок,
   Таб1.Дата КАК ДатаДок,
   Таб1.ВалютаДокумента КАК ВалютаДок,
   Таб2.Курс
ИЗ
   Документ.ЗаказПокупателя КАК Таб1
       ЛЕВОЕ СОЕДИНЕНИЕ ПериодыКурсов КАК Таб2
       ПО Таб1.ВалютаДокумента = Таб2.Валюта
           И Таб1.Дата >= Таб2.ПериодНач
           И Таб1.Дата < Таб2.ПериодКон
ГДЕ
   Таб1.Дата МЕЖДУ &ДатаНач И &ДатаКон

УПОРЯДОЧИТЬ ПО
   ДатаДок
27 Scooter
 
26.01.11
13:40
фиолетово

Мне всё равно
42 fisher
 
26.01.11
18:28
Ах да :)

Мне всё равно