![]() |
|
УТ11. Помогите с запросом, который выбирает последнюю и предпоследнию цену на товар | ☑ | ||
---|---|---|---|---|
0
breezee
28.05.15
✎
12:20
|
Есть запрос, который выбирает последнюю и предпоследнию цену на товар. для одного документа выбираются все документы кроме одного товара у которого единственное отличие - упаковка - комплект, но в условии нет ни где ничего про комплекты, все естьNULL поставил (для выборки из правых таблиц, кода левое соединение), не могу понять что не так. Простите, туплю очень жестко и уже давно
Код запроса: ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПредыдущаяДата, ЦеныНоменклатурыСрезПоследних.Регистратор, ЦеныНоменклатурыСрезПоследних.Характеристика ПОМЕСТИТЬ втЦеныНоменклатуры ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&ДатаАктуальнойЦены, ДЕНЬ), ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатуры.Номенклатура И (ЦеныНоменклатуры.ВидЦены = &ВидЦены) И ЦеныНоменклатурыСрезПоследних.Период > ЦеныНоменклатуры.Период И ЦеныНоменклатурыСрезПоследних.Характеристика = ЦеныНоменклатуры.Характеристика ГДЕ ЦеныНоменклатурыСрезПоследних.Период >= &ДатаНач СГРУППИРОВАТЬ ПО ЦеныНоменклатурыСрезПоследних.Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена, ЦеныНоменклатурыСрезПоследних.Регистратор, ЦеныНоменклатурыСрезПоследних.Характеристика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втЦеныНоменклатуры.Номенклатура, ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК ЦенаСтарая, втЦеныНоменклатуры.Цена КАК ЦенаНовая, втЦеныНоменклатуры.Цена - ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК Разница, втЦеныНоменклатуры.Регистратор, втЦеныНоменклатуры.Характеристика ПОМЕСТИТЬ Результ ИЗ втЦеныНоменклатуры КАК втЦеныНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО втЦеныНоменклатуры.Номенклатура = ЦеныНоменклатуры.Номенклатура И втЦеныНоменклатуры.ПредыдущаяДата = ЦеныНоменклатуры.Период И (ЦеныНоменклатуры.ВидЦены = &ВидЦены) И втЦеныНоменклатуры.Характеристика = ЦеныНоменклатуры.Характеристика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Результ.Номенклатура КАК Номенклатура, Результ.ЦенаСтарая, Результ.ЦенаНовая, Результ.Разница, Результ.Регистратор, ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Количество, Результ.Характеристика, Результ.Номенклатура.Наименование КАК НоменклатураНаименование, Результ.Характеристика.Наименование КАК ХарактеристикаНаименование ИЗ Результ КАК Результ ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаАктуальнойЦены, ) КАК ТоварыНаСкладахОстатки ПО Результ.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И Результ.Характеристика = ТоварыНаСкладахОстатки.Характеристика И Результ.Характеристика = ТоварыНаСкладахОстатки.Характеристика УПОРЯДОЧИТЬ ПО НоменклатураНаименование, ХарактеристикаНаименование |
|||
1
breezee
28.05.15
✎
12:28
|
При чем такое поведение только для старого документа - для нового все выбирвется
|
|||
2
be-may
28.05.15
✎
13:19
|
"для одного документа выбираются все документы кроме одного товара у которого единственное отличие - упаковка - комплект, но в условии нет ни где ничего про комплекты" вот лично я на этой фразе зависла.
Автор переформулируй как-то понятней условие. // это в качестве апа |
|||
3
breezee
28.05.15
✎
13:55
|
(2) Спасибо, но я уже разобрался, мне нужно получать все значения в периоде а не только последнее и предпоследнее - сейчас ищу как это сделать. т.е. надо получить номенклатуру и в её разрезе выводить документы, которые изменяли её цену, а так же её остатки и предыдущую цену
|
|||
4
breezee
28.05.15
✎
14:00
|
Я же правильно понимаю что теперь мне нужно переделать этот запрос из гугла под свои нужды?
ВЫБРАТЬ Таб1.СсылкаДок, Таб1.ДатаДок, Таб1.ВалютаДок, Таб2.Курс ИЗ (ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК СсылкаДок, ЗаказПокупателя.Дата КАК ДатаДок, ЗаказПокупателя.ВалютаДокумента КАК ВалютаДок, МАКСИМУМ(Валюты.Период) КАК ПериодДок ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Валюты ПО Валюты.Период <= ЗаказПокупателя.Дата И Валюты.Валюта = ЗаказПокупателя.ВалютаДокумента СГРУППИРОВАТЬ ПО ЗаказПокупателя.Ссылка) КАК Таб1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Таб2 ПО Таб1.ПериодДок = Таб2.Период И Таб1.ВалютаДок = Таб2.Валюта |
|||
5
breezee
28.05.15
✎
14:10
|
Ап. Поомгите, не догоняю. Нужно выбирать регистратор с периода и по период указанный пользователем и в нем выбирать номенклатуру - для неё находить количество и предыдущую цену. Не могу сообразить как это сделать. Вот старый запрос, как его изменить?
ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПредыдущаяДата, ЦеныНоменклатурыСрезПоследних.Регистратор, ЦеныНоменклатурыСрезПоследних.Характеристика ПОМЕСТИТЬ втЦеныНоменклатуры ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&ДатаАктуальнойЦены, ДЕНЬ), ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатуры.Номенклатура И (ЦеныНоменклатуры.ВидЦены = &ВидЦены) И ЦеныНоменклатурыСрезПоследних.Период > ЦеныНоменклатуры.Период ГДЕ ЦеныНоменклатурыСрезПоследних.Период >= &ДатаНач СГРУППИРОВАТЬ ПО ЦеныНоменклатурыСрезПоследних.Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена, ЦеныНоменклатурыСрезПоследних.Регистратор, ЦеныНоменклатурыСрезПоследних.Характеристика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втЦеныНоменклатуры.Номенклатура, ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК ЦенаСтарая, втЦеныНоменклатуры.Цена КАК ЦенаНовая, втЦеныНоменклатуры.Цена - ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК Разница, втЦеныНоменклатуры.Регистратор, втЦеныНоменклатуры.Характеристика ПОМЕСТИТЬ ВыборкаБезКоличества ИЗ втЦеныНоменклатуры КАК втЦеныНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО втЦеныНоменклатуры.Номенклатура = ЦеныНоменклатуры.Номенклатура И втЦеныНоменклатуры.ПредыдущаяДата = ЦеныНоменклатуры.Период И (ЦеныНоменклатуры.ВидЦены = &ВидЦены) И втЦеныНоменклатуры.Характеристика = ЦеныНоменклатуры.Характеристика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВыборкаБезКоличества.Номенклатура, ВыборкаБезКоличества.ЦенаСтарая, ВыборкаБезКоличества.ЦенаНовая, ВыборкаБезКоличества.Разница, ВыборкаБезКоличества.Регистратор, ВыборкаБезКоличества.Характеристика, ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток ИЗ ВыборкаБезКоличества КАК ВыборкаБезКоличества ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ПО ВыборкаБезКоличества.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ВыборкаБезКоличества.Характеристика = ТоварыНаСкладахОстатки.Характеристика |
|||
6
breezee
28.05.15
✎
14:19
|
Скажите, пожалуйста, если я не прав и сейчас буду делать редкостную фигню. Во первых я получу все регистраторы за период, который указал пользователь и всю номенклатуру(чтобы потом выводить в разрезе регистраторов) и как-то выполнять поиск максимум за периода уже по дате в регистраторе(вот тут я уже не понимаю как сделать) - вроде все нормально звучит. Подскажите немного - чтобы установить в качестве параметра дату регистратора - надо этот регистратор во вложенном запросе в условии получать?
|
|||
7
breezee
28.05.15
✎
14:38
|
АП
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |