|
Выбор минимальных значений с ресурсами запросом |
☑ |
0
vladimir80
23.09.14
✎
13:37
|
Приветствую! Подскажите, как лучше составить запрос.
Переодический РегистрСведений со следующей структурой:
Номенклатура - Поставщик - Цена
Номенклатура - элемент справочника Номенклатура.
Поставщик - элемент справочника с доп.реквизитом Приоритет.
Необходимо выбрать все последние цены номенклатуры поставщиков, причем если номенклатура есть у различных поставщиков - то взять цену поставщика с минимальным приоритетом.
|
|
1
DirecTwiX
23.09.14
✎
13:38
|
Срез последних + группировка
|
|
2
DirecTwiX
23.09.14
✎
13:39
|
Плюс внутреннее соединение по поставщику и номенклатуре
|
|
3
kosts
23.09.14
✎
13:39
|
А если и приоритет одинаковый?
|
|
4
vladimir80
23.09.14
✎
13:41
|
Срез последних - это понятно. А вот группировка - тут не могу разобраться.
Приоритет не одинаковый - поставщиков товара слишком мало.
|
|
5
kosts
23.09.14
✎
13:43
|
(4) На ввод одинаковых приоритетов стоит запрет?
|
|
6
vladimir80
23.09.14
✎
13:44
|
(5) поставщиков 7 и ситуация не изменится. На них изначально стоит приоритет. В противном случае можно при одинаковом приоритете выбирать минимальную цену.
|
|
7
DirecTwiX
23.09.14
✎
13:45
|
Вроде так:
ВЫБРАТЬ
Цены.КурсОбучения КАК Номенклатура,
Цены.Физлицо КАК ПриоритетПоставщика,
Цены.НомерДокумента КАК Цена
ПОМЕСТИТЬ ВТ
ИЗ
РегистрСведений.ПройденныеУчебныеКурсы.СрезПоследних КАК Цены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура,
МИНИМУМ(ВТ.ПриоритетПоставщика) КАК ПриоритетПоставщика
ПОМЕСТИТЬ ВТ2
ИЗ
ВТ КАК ВТ
СГРУППИРОВАТЬ ПО
ВТ.Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура,
ВТ.ПриоритетПоставщика,
ВТ.Цена
ИЗ
ВТ КАК ВТ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
ПО ВТ.Номенклатура = ВТ2.Номенклатура
И ВТ.ПриоритетПоставщика = ВТ2.ПриоритетПоставщика
|
|
8
vladimir80
23.09.14
✎
14:00
|
(7)Спасибо, отличное решение!
Итоговый запрос:
ВЫБРАТЬ
ЦеныПоставщиковСрезПоследних.Номенклатура,
ЦеныПоставщиковСрезПоследних.Поставщик.ПриоритетПоставщика КАК ПоставщикПриоритетПоставщика,
ЦеныПоставщиковСрезПоследних.Цена
ПОМЕСТИТЬ ВТ
ИЗ
РегистрСведений.ЦеныПоставщиков.СрезПоследних КАК ЦеныПоставщиковСрезПоследних
ГДЕ
ЦеныПоставщиковСрезПоследних.ЕстьВПрайсе = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура,
МИНИМУМ(ВТ.ПоставщикПриоритетПоставщика) КАК ПоставщикПриоритетПоставщика
ПОМЕСТИТЬ ВТ2
ИЗ
ВТ КАК ВТ
СГРУППИРОВАТЬ ПО
ВТ.Номенклатура
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура,
ВТ.ПоставщикПриоритетПоставщика,
МИНИМУМ(ВТ.Цена) КАК Цена
ИЗ
ВТ КАК ВТ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
ПО ВТ.Номенклатура = ВТ2.Номенклатура
И ВТ.ПоставщикПриоритетПоставщика = ВТ2.ПоставщикПриоритетПоставщика
СГРУППИРОВАТЬ ПО
ВТ.Номенклатура,
ВТ.ПоставщикПриоритетПоставщика
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший