Объясните смысл запроса: цены послед. поступлений

1. 20.11.20 22:26 Сейчас в теме
Здравствуйте
Смотрю в конфе такой кусок:

|ВЫБРАТЬ
	|	Товары.Ссылка.МоментВремени          КАК МоментВремени,
	|	Товары.Номенклатура                  КАК Номенклатура
         ...
	|ПОМЕСТИТЬ ЦеныПоступлений
	|ИЗ
	|	Документ.Поступление.Товары КАК Товары
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаТовары ПО Товары.Номенклатура = ТаблицаТовары.Номенклатура
	|ГДЕ
	|	Товары.Ссылка.Проведен
	|	И Товары.Ссылка.Контрагент = &Контрагент
	|	И Товары.Ссылка.Дата <= &Дата
	|;
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЦеныПоступлений.Номенклатура         КАК Номенклатура,
	...
	|ПОМЕСТИТЬ ЦеныПоследнихПоступлений
	|ИЗ
	|	ЦеныПоступлений КАК ЦеныПоступлений
	|	
	|	ЛЕВОЕ СОЕДИНЕНИЕ 
	|		ЦеныПоступлений КАК Отбор
	|	ПО
	|		ЦеныПоступлений.Номенклатура = Отбор.Номенклатура
	|		И ЦеныПоступлений.МоментВремени < Отбор.МоментВремени
	|ГДЕ
	|	Отбор.МоментВремени ЕСТЬ NULL;
Показать


Вот этот кусок условия не могу понять, что тут происходит:
|		И ЦеныПоступлений.МоментВремени < Отбор.МоментВремени
|ГДЕ
|	Отбор.МоментВремени ЕСТЬ NULL


То есть, соединяют таблицу саму с собой.
Что за значения
МоментВремени ЕСТЬ NULL
Это какие?
И что за сравнение тогда
ЦеныПоступлений.МоментВремени < Отбор.МоментВремени

Если у нас отбор МоментВремени ЕСТЬ NULL
Найденные решения
2. shurikvz 20.11.20 22:49 Сейчас в теме
Все верно.

Пример постройте, и будет понятно.

Возьмите простейшую таблицу из двух строк:
Номен1 19.11.20
Номен1 20.11.20

Теперь левым соединением присоедините ее к себе, итог получится:
ЦеныПоступлений.Номен1 - ЦеныПоступлений.19.11.20 - Отбор.Номен1 - Отбор.20.11.20
ЦеныПоступлений.Номен1 - ЦеныПоступлений.20.11.20 - NULL - NULL

Условием берете последнюю строку и получаете дату последней цены.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. shurikvz 20.11.20 22:49 Сейчас в теме
Все верно.

Пример постройте, и будет понятно.

Возьмите простейшую таблицу из двух строк:
Номен1 19.11.20
Номен1 20.11.20

Теперь левым соединением присоедините ее к себе, итог получится:
ЦеныПоступлений.Номен1 - ЦеныПоступлений.19.11.20 - Отбор.Номен1 - Отбор.20.11.20
ЦеныПоступлений.Номен1 - ЦеныПоступлений.20.11.20 - NULL - NULL

Условием берете последнюю строку и получаете дату последней цены.
3. uno-c 164 23.11.20 12:23 Сейчас в теме
Интересная фишка, можно максимум не рассчитывать.
4. SlavaKron 23.11.20 15:36 Сейчас в теме
Приём изящный, а производительность не очень. Проверил на чистых данных в вакууме в клиент-серверной базе: МАКСИМУМ отработал быстрее в 3 раза. На файловой – в 10 раз.
Оставьте свое сообщение
Вопросы с вознаграждением