Подскажите с расчетом таблиц в запросе

1. a3a 15 16.10.17 18:12 Сейчас в теме
Коллеги подскажите пожалуйста. возникла необходимость достать таблицу запросом и рассчитать в ней определенную колонку. Вся проблема в том что в расчете задействованы значения предыдущей строки. т.е. у меня есть значения первой строки. что бы рассчитать последующие строки нужно брать цифры из предыдущих строк. Подскажите куда копать?

например пока сделал так: создал таблицу, продублировал, пронумеровал, соединил со смещением на 1 строку. НО таким образом у меня рассчитывается только вторая строка. что бы третью рассчитать нужно соединять опять. уже понимаю что неправильно. хотя бы вкратце подскажите направление. Заране спасибо.
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Goleff74 215 16.10.17 18:44 Сейчас в теме
(1)
ВЫЧИСЛИТЬВЫРАЖЕНИЕ("МояКолонка", , , "Предыдущая", "Предыдущая") + МояКолонка

Это в пользовательском поле, если что.

А если СКД использовать никак, то лефт джойн таблицы с самой собой с условиями по полям сортировки, расчет поля НомерПоПорядку, и еще один лефт джойн по НомерПоПорядку - 1.
+
4. NeviD 17.10.17 10:29 Сейчас в теме
(1) В запросе используем таблицу с номером строки.
Что-то наподобие такого:
ВЫБРАТЬ
ТЗ.НомерСтроки,
ТЗ.Реквизит1,
ТЗ.Реквизит2,
ТЗ.Сумма
ПОМЕСТИТЬ ТЗ
ИЗ ТЗ КАК ТЗ
;
ВЫБРАТЬ
ТЗ.НомерСтроки,
ТЗ.Реквизит1,
ТЗ.Реквизит2,
ТЗ.Сумма,
ТЗПредСтрока.Сумма КАК СуммаПредыдущейСтроки
ИЗ ТЗ КАК ТЗ
ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗПредСтрока ПО ТЗ.НомерСтроки-1 = ТЗПредСтрока.НомерСтроки
Показать


У первой строки СуммаПредыдущейСтроки = NULL, у остальных значение Сумма предыдущей строки.
+
5. a3a 15 17.10.17 12:08 Сейчас в теме
(4)
предыдущей


я уже начинал делать так. но застрял. постараюсь описать задачу.

есть таблица по неделям.
так вот, формула первой недели отличается от последующих строк.
выявил первую неделю, поставил что ЭтоПерваяНеделя = Истина и расчитал без проблем. при соединении таблицы с самой собой со смещением на неделю я расчитал 2 строчку и все. получается что бы 3 строчку расчитать еще раз надо соединять? или как? Вот тут застрял.хотя могу просто тупить.
+
6. ildarovich 7861 17.10.17 12:45 Сейчас в теме
(5) Лучше объяснить задачу в точности, как она есть. Есть таблица по неделям...
- Первая колонка - дата или номер недели?
- Что во второй колонке?
- Сколько их всего?
- Формула первой недели: какая она? Формула второй, третьей недели и так далее. Чем больше подробностей, тем лучше.
Скорее всего, нужно что-то вроде "нарастающего итога", но лучше все же описать задачу поподробнее
+
7. a3a 15 17.10.17 18:15 Сейчас в теме
(6)

что то планирования продажи.

есть таблица:
первая колонка дата - т.е. на каждую строку это понедельник недели за определенный выбранный интервал. Например выбираем текущий день недели и указываем количество недель например 5. итого у нас 6 строк в таблице. Текущий понедельник + 5 понедельников вперед.

вторая колонка товар.
формула первой строки:
(Среднее значение продаж за 5 недель назад по текущему товару.) - Остатки по указанному товару на понедельник первой строки.

формула 2 и последующих строк:
(Среднее значение продаж за 5 недель назад (от понедельника 2 строки) по текущему товару.) - Остатки по указанному товару на понедельник предыдущей строки.
+
8. ildarovich 7861 17.10.17 19:19 Сейчас в теме
(7) То есть получается, что мы (по одному товару) знаем его текущий остаток на понедельник текущей недели и нам нужно построить график остатков товаров на несколько недель вперед. Остатки будут уменьшаться за неделю настолько, насколько в среднем в неделю их покупали за пять прошедших недель.
- Так?
То есть если на остатке 100 единиц, за пять недель купили 75 единиц (по 15 в неделю), то нужно получить ряд прогнозных остатков товаров 100, 85, 70, 55, 40, 25.
- Так?
- Ага, теперь понял, что среднее мы считаем в скользящем окне (от понедельника второй недели и так далее)... нет, снова не понял, понедельник второй строки он вроде бы в будущем. Откуда возьмутся продажи за пять недель? Их ведь всего теперь будет четыре?
Может, рисунок нарисовать? Вам самому-то задача понятна или так клиент объясняет?

В общем, лучше таблицу с примером расчета.

Запрос я напишу, он будет простым, но с пониманием задачи боюсь промахнуться.
+
9. a3a 15 17.10.17 20:11 Сейчас в теме
(8)
я пытался попроще описать, но кажется запутал больше.

)) все верно. скользящее окно. из вышеуказанных данных мы получается можем взять для 2 строки уже всего 4 недели. 1 неделю (будущие данные) мы заранее загружаем в регистр (своего рода планируемые продажи на 16 недель вперед). там так же указана дата - понедельник недели и количество планируемых продаж по данному товару. Так вот получается будущие данные мы берем из этого регистра.
в Итоге получается мы расчитываем данные по продажам из регистра продаж и планом продаж.
+
3. Dnki 4 16.10.17 20:29 Сейчас в теме
Я бы поступил просто:
- первым запросом собрал сведения. Результат выгрузил в ТЗ
- программно прошелся по ней и рассчитал нужную колонку.
- следующий запрос получил ТЗ и дальше выбирает, что нужно. Если нужна дальнейшая выборка, может предыдущего шага и достаточно.

Я напомню, что ОЗУ придумали именно для одновременного обращения к данным из разных мест. А файловые данные концептуально в момент времени читают один фрагмент данных. Проще говоря, головка диска находится над одним его участком (нынешние ССД) эмулируют тот-же подход. К чему я так долго: придумать запрос можно, но он противоречит самой архитектуре ЭВМ, значит будет долгим.
+
10. a3a 15 19.10.17 09:17 Сейчас в теме
например имеем таблицы в 10 строк. в 1 строке значение известно. допустим 2. каким образом для остальных строк можно прописать формулу + 3

Значение
1 строка 2 - заранее значем значение
2 строка 5 расчитываем + 3 к предыдущей строке
3 строка 8 расчитываем + 3 к предыдущей строке
4 строка 11 расчитываем + 3 к предыдущей строке
и т.д.
+
11. ildarovich 7861 19.10.17 12:45 Сейчас в теме
(10) Если я правильно понял задачу, то вся она решается вот таким запросом:
ВЫБРАТЬ
	ФактическиеПродажи.Период,
	ФактическиеПродажи.Номенклатура,
	ФактическиеПродажи.КоличествоОборот КАК Количество,
	ЛОЖЬ КАК План
ПОМЕСТИТЬ НедельныеПродажи
ИЗ
	РегистрНакопления.Продажи.Обороты(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Дата1, НЕДЕЛЯ, -&Окно), НЕДЕЛЯ), КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Дата1, НЕДЕЛЯ, -1), НЕДЕЛЯ), Неделя, ) КАК ФактическиеПродажи

ОБЪЕДИНИТЬ ВСЕ

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

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

СГРУППИРОВАТЬ ПО
	Периоды.Период,
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.КоличествоОстаток
Показать
Здесь в первом подзапросе объединяются фактические продажи по неделям за несколько (параметр &Окно) предшествующих Дата1 недель и плановые продажи по неделям с Дата1 по Дата2.
Во втором подзапросе происходит усреднение всех продаж (фактических и плановых) для каждого периода в окне, предшествующему этому периоду.
В третьем подзапросе складывается остаток и все расходы, начиная с Дата1 по ту неделю, на конец которой считается остаток. Нарастающий итог получается за счет того, что в первой строке учитываем расход за первую неделю, во второй - расход за первую и вторую неделю, в третьей - за первую, вторую и третью неделю и так далее.
То есть формула:
Х1 = Ост - Расход1
Х2 = Ост - Расход1 - Расход2
Х3 = Ост - Расход1 - Расход2 - Расход3 и так далее
Отсюда и получается реккурентная зависимость:
Х2 = Х1 - Расход2
Х3 = Х2 - Расход3 и так далее
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот