Выбрать по две последние записи по всем измерениям РС запросом #664999


#0 by Nikoss
Есть периодичный регистр: Допустим будут такие данные: 1.01 _ Ручка _ 14 1.01 _ Ручка _ 3 1.01 _ Карандаш _ 2 2.01 _ Ручка _ 7 2.01 _ Карандаш _ 3 3.01 _ Ручка _ 4 4.01 _ Ластик _ 1 4.01 _ Ручка _ 11 5.01 _ Ластик _ 2 Как выбрать по две записи каждой номенклатуры? Т.е. чтобы было так: 3.01 _ Ручка _ 4 4.01 _ Ручка _ 11 1.01 _ Карандаш _ 2 2.01 _ Карандаш _ 3 4.01 _ Ластик _ 1 5.01 _ Ластик _ 2
#1 by LehhaK
А что не получается?
#2 by Nikoss
ну я могу взять срез последних на дату, но этот же срез будет только по 1 штуке, как до второй добраться?
#3 by sda553
Идея такая (как выбрать вторые по истории), дальше сам думай: Из ЛЕВОЕ СОЕДИНЕНИЕ ( Выбрать Максимум(Период) КАК МаксПериод, Измерение Из Регистр.МойРегистр СГРУППИРОВАТЬ ПО Измерение ) Максимумы По Максимумы.Период>Немаксимумы.Период И Максимумы.Измерение = НеМаксимумы.Измерение
#4 by LehhaK
Бери не срез. Бери весь регистр, сортируй по дате, выбирай первые 2. Должно прокатить ( я когда то давно на ценник выводил 2 цены, чтоб 1 зачеркивать, типа акция)
#5 by Sensodin
СрезПредпоследних
#6 by LehhaK
На вот:
#7 by sda553
неправильно
#8 by LehhaK
работает
#9 by samozvanec
ты так всего 2 записи получишь. а надо в разрезе измерений
#10 by sda553
Не сомневаюсь но выдает две строки, которые не имеют никакого отношения к тому, что нужно ТС
#11 by LehhaK
он спросил, как получить 2 последние записи. я ответил. В разрезе измерений запилит поди сам
#12 by samozvanec
ну да, там всего-то |ГДЕ |   ЛОЖЬ дописать
#13 by sda553
Не поверишь, но 1. "запиливание под разрез измерений" - это собственно самая главная задача, 2. Твой запрос не выбирает две последние записи в общем случае
#14 by Fragster
Выбрать * Из регистр где Регистр.Период, Регистратор в (Выбрать Первые 2 Период, Регистратор Из Регистр Как РегистрВложенный Где РеигстрВложенный.Измерения = Регистр.Измерения Упорядочить по РегистрВложенный.Период Убыв)
#15 by sda553
Нет, то же неправильно.
#16 by Fragster
почему?
#17 by LehhaK
в написано не так. Впрочем, у тебя полоска длиннее - ты советуй :)
#18 by sda553
Я уже посоветовал в - правда там с ошибками, лень исправлять, но набросок представление о решении дает
#19 by sda553
Потому что в 1С нельзя из вложенных запросов обращаться к невложенным.
#20 by Fragster
бугага!
#21 by ProgAL
ВЫБРАТЬ
#22 by ProgAL
А дальше воспользоваться великой силой аналогии.
#23 by Fragster
вот это работает (самописька, для себя переписать несложно): ИЗ    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры    ЦеныНоменклатуры.Период В            (ВЫБРАТЬ ПЕРВЫЕ 2                РегистрВложенный.Период            ИЗ                РегистрСведений.ЦеныНоменклатуры КАК РегистрВложенный
#24 by Fragster
а теперь 3 последних :)
#25 by Fragster
+ или 5...
#26 by ProgAL
Ваше решение короче. Но кореллированный запрос имеет спорное быстродействие.
#27 by samozvanec
а если не на всю номенклатуру одновременно цены выставляют? если по разным позициям последние 2 периода не будут совпадать?
#28 by Fragster
при соединении по всем измерениям - относительно неплохо. у меня запрос отрабатывает за пол секунды, при этом возвращает 22 тысячи строк
#29 by Fragster
все правильно будет
#30 by samozvanec
#31 by samozvanec
и у тебя тоже самое. 2 периода максимальных выбрал, но не факт, что именно эти периоды максимальные у всех записей. в случае с валютами, конечно, все здорово, но не с установкой цен.
#32 by Fragster
вариант работает, инфа 100%
#33 by ProgAL
Как это у всех записей? Там на каждую валюту опредяются свои 2 последние записи. Вы скачайте консоль запросов "Запросник" и посмотрите все ВТ. Или по частям разберите каждый запрос пакета в отдельном окне.
#34 by ProgAL
И в основная таблица сканируется один раз, на каждую строку исходной таблицы выполняется определение двух последних дат, и если дата из основной таблицы входит в этот список, тогда ГДЕ ее не отсекает.
#35 by samozvanec
максимум выдаст по столбцу
#36 by Fragster
план запроса :
#37 by mikecool
выбрать из ВТ объединить выбрать измерения, максимум(период) внешнее соединение с ВТ ... по измерения И период < ВТ.Период мож так?
#38 by samozvanec
таблица ну и как ты думаешь, какие 2 даты тебе даст вложенный запрос из ?
#39 by Fragster
вот универсальный запрос:    2,    "А" ВЫБРАТЬ    3,    "А" ВЫБРАТЬ    2,    "Б" ВЫБРАТЬ    3,    "Б" ВЫБРАТЬ    4,    "Б"    Данные.Период В            (ВЫБРАТЬ ПЕРВЫЕ 2                Вложенный.Период            ИЗ
#40 by MaxS
Как вариант. Если не требуется получить это в запросе, можно выбрать по всему регистру, отсортировать по дате, итоги по измерениям и по дате,  в цикле счетчик - досчитали до двух, команда "Продолжить" и переходим к следующему изменению...
#41 by ProgAL
Единственный минус из нужно дату отчески надожить во вложенный запрос.
#42 by ProgAL
Максимум по столбцу, но по каждой валюте свой максимум.
#43 by PiterPrg
Я предлагаю как-то так: ГДЕ    П1.Товар ЕСТЬ НЕ NULL     ГДЕ    П1.Товар ЕСТЬ НЕ NULL И П2.Товар ЕСТЬ НЕ NULL
#44 by PiterPrg
Что-то последняя строчка в код не включилась :-) Ну я думаю, понятно
#45 by samozvanec
ага, а выдаст по столбцу, я о том же
#46 by PiterPrg
В последнем условии должно быть или :-)  П1.Товар ЕСТЬ НЕ NULL ИЛИ П2.Товар ЕСТЬ НЕ NULL Вот так
#47 by samozvanec
ВЫБРАТЬ    РегистрСведений.КурсыВалют.СрезПоследних( ИЗ    фыв КАК фыв
#48 by ProgAL
Жесть, но сработет.
#49 by samozvanec
про максимум я нагло солгал) извиняюсь
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С