Поле таблицы 1 как условие для поля таблицы 2 в запросе

1. user645801_yyyuuu123q 29.06.22 09:36 Сейчас в теме
Всем привет ребята. Интуитивно Я догадываюсь но хотелось бы уточнить.

ВЫБРАТЬ
	ВЫБОР
		КОГДА Табл1.Дата < Табл1.Дата2
			ТОГДА Табл2.Ссылка
	КОНЕЦ КАК СсылкаГруз,
	Табл1.Номер КАК Номер
ИЗ
	Табл1 КАК Табл1
		ЛЕВОЕ СОЕДИНЕНИЕ Табл2 КАК Табл2
		ПО Табл1.Номер = Табл2.Номер
Показать


В общем подскажите пожалуйста друзья, правильно ли так писать запрос и как обойти эту ситуацию если так не правильно. Что то подсказывает не очень приличный вариант
По теме из базы знаний
Найденные решения
25. RustamZz 30.06.22 11:13 Сейчас в теме
(24)
Выбрать Вагон, Максимум(Период) Из (Выбрать Вагон, Период Из РС1 Объединить все Выбрать Вагон, Период Из РС2) Сгруппировать по Вагон 
это аналог среза последних который строит платформа при формировании SQL запроса, только для двух таблиц. Ну и результат соединить с РС1 и РС2.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. RustamZz 29.06.22 11:42 Сейчас в теме
(1) Правильно. Если в результате выражения будет NULL и это вы предусмотрели, то ничего менять не нужно. Если такие строки вообще не нужны условие можно перенести в ГДЕ.
6. user645801_yyyuuu123q 29.06.22 15:16 Сейчас в теме
(4) Это вообще оптимальное решение?
9. RustamZz 29.06.22 15:21 Сейчас в теме
(6) Если поле Номер проиндексировано (если это стандартное поле документа то проиндексировано), то да.
2. alex_bob 246 29.06.22 10:42 Сейчас в теме
Наводящий вопрос: а что должно содержаться в поле СсылкаГруз, когда Табл1.Дата >= Табл1.Дата2?
3. alex_bob 246 29.06.22 10:46 Сейчас в теме
И сразу второй: что там должно содержаться, если в таблице Табл2 нет строки с Табл1.Номер = Табл2.Номер?
5. user645801_yyyuuu123q 29.06.22 11:44 Сейчас в теме
(3)Спасибо что откликнулся.
Вот есть 3 таблицы
1)Табл
Дата
Номер
2)Табл
Дата
Номер
СсылкаГрузГруппа
3)Табл
Дата
Номер
СсылкаГруз

Нужно выбрать максимальную дату ну и от этого будет зависить поле ПолеГруз, там или группаГруза или сам Груз
8. Alexponenta 29.06.22 15:19 Сейчас в теме
(5) Откуда выбирается максимальная дата?
10. user645801_yyyuuu123q 29.06.22 15:27 Сейчас в теме
(8)
ВЫБРАТЬ
	ВЫБОР
		КОГДА Таб1.ДатаВвода < Таб2.Регистратор.Дата
			ТОГДА Таб2.ВидТ
	КОНЕЦ КАК Груз1,
	Таб1.Номер КАК Номер,
	ВЫБОР
		КОГДА Таб1.ДатаВвода < Таб2.Регистратор.Дата
			ТОГДА Таб2.Регистратор.Дата
		ИНАЧЕ Таб1.ДатаВвода
	КОНЕЦ КАК Дата1
ПОМЕСТИТЬ Результат
ИЗ
	Таб2 КАК Таб2
		ЛЕВОЕ СОЕДИНЕНИЕ Таб1.Ваг КАК Таб1
		ПО Таб2.Ваг = Таб1.Ссылка
ГДЕ
	Таб1.Номер В(&В)
	И НЕ Таб2.ВидТ = NULL
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Результат.Номер КАК Номер,
	ВЫБОР
		КОГДА Таб3.ДатаП > Результат.Дата1
			ТОГДА Таб3.ПодГруз
		ИНАЧЕ Результат.Груз1
	КОНЕЦ КАК Груз
ИЗ
	Налив КАК Результат
		ЛЕВОЕ СОЕДИНЕНИЕ Таб3 КАК Таб3
		ПО Результат.Номер = Таб3.Вагон.Номер
Показать


Вот такой вариант предложили. Не совсем нравится. Что то с ним не так. Но как сделать правильно тоже понять не могу.
11. Alexponenta 29.06.22 15:29 Сейчас в теме
(10) Звучит странно. А можно в личку продублировать целиком задачу?
user645801_yyyuuu123q; +1 Ответить
12. RustamZz 29.06.22 15:33 Сейчас в теме
(10) Он совсем не похож на оригинальный и в нем все плохо. Задачу можно по-людски рассказать? В том числе что за объекты: Таб1, Таб2 и Таб3?
13. user645801_yyyuuu123q 29.06.22 15:49 Сейчас в теме
(12)Да Я думал немного абстракции добавить так проще понять будет.
Смотрите есть 2 регистра один справочник. Нужно выбрать максимальное последний проведенный документ, ну и из него взять какое то значение. Оригинальный запрос выглядит так

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Налив.НомерВагона КАК НомерВагона,
	ВЫБОР
		КОГДА ПропаркаВагоновСрезПоследних.ДатаПропарки > Налив.Дата1
			ТОГДА ПропаркаВагоновСрезПоследних.ПодГруз
		ИНАЧЕ Налив.Груз1
	КОНЕЦ КАК Груз
ИЗ
	Налив КАК Налив
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПропаркаВагонов.СрезПоследних КАК ПропаркаВагоновСрезПоследних
		ПО Налив.НомерВагона = ПропаркаВагоновСрезПоследних.Вагон.НомерВагона
Показать
14. RustamZz 29.06.22 16:30 Сейчас в теме
(13) Замечания. Если у вас есть ссылки в обоих регистрах (вагоны), то соединяться нужно по ссылкам, а не номерам вагонов. Если периодичность в регистре сведений по позиции регистратора, то надо дату не из регистратора брать, а Период из РС. С NULL сравнивать нельзя для него свои условия is null и is not null.
18. user645801_yyyuuu123q 30.06.22 08:26 Сейчас в теме
(14)Сам запрос не Мой. Пока не стоит обращать внимания на косяки ссылками. Пока хотябы понять в правильном направлении двигаемся или нет
19. RustamZz 30.06.22 09:07 Сейчас в теме
(18) Я задачи так и не услышал, поэтому что бы хоть что-то написать написал явные ошибки в реализации: Как вы пишите "Нужно найти какой-то последний документ и из него взять какой-то реквизит". Звучит как в русской сказке: Поди туда - незнамо куда, принеси то - незнамо что. Если кто-то задает вопрос по типовому решению, то много из контекста можно понять, а в вашем случае это не так. Вам же самим когда ставили задачу ее не так озвучивали, как вы нам?
В грамотно построенном решении все должно решиться одним запросом к СрезуПоследних.
20. Alexponenta 30.06.22 09:11 Сейчас в теме
(19) Одним вряд ли. Регистра два.
21. RustamZz 30.06.22 09:50 Сейчас в теме
(20) Два регистра это может быть и проектная ошибка, поэтому я и написал "в грамотно". Зачем на каждую операцию с вагоном заводить отдельный регистр? Может правильно было добавить поле Операция или два отдельных поля: ДатаНаливки и ДатаПропарки? Возьмем типовые решения 1С у нас же один регистр СобытияОС, а не отдельные.
22. user645801_yyyuuu123q 30.06.22 09:54 Сейчас в теме
(19)
Задача такая.
Требуется получить последнее значение чем грузился вагон.
Вагон может быть груженный а может быть с пропарки. Если погружен то груз у него справочник НомеклатураСсылка, если Пропарка то груз у него Справочник ГруппыНефтепродуктовСсылка
Нам нужно знать какое последнее состояние вагона прямо сейчас, пропарен или погружен.

Пропарка и отгрузка это разные регистры и разные документы.
В регистрах это одно и тоже измерение Вагон.

Может лучше хранить последнее состояние в справочнике вагона, сделать составное поле на эти справочники и записывать туда в зависимости от операции, или можно еще как нибудь сделать?
23. RustamZz 30.06.22 10:11 Сейчас в теме
(22) Из объединения регистров выбрать Максимальный период для каждого вагона. По этой дате еще раз соединиться с обоими РС по Период=МаксПериод, через is null взять значение.
Мое мнение что это должен быть один регистр укрепилось, тогда срезпоследних даст нам сразу результат. И в один регистр могут писать разные документы, если кто-то этого не знал.
24. user645801_yyyuuu123q 30.06.22 10:21 Сейчас в теме
Я знаю что можно писать из разных документов.
Но не совсем понял ваш подход, вроде бы в голове что начало появляться. Но кажется не до конца понял
25. RustamZz 30.06.22 11:13 Сейчас в теме
(24)
Выбрать Вагон, Максимум(Период) Из (Выбрать Вагон, Период Из РС1 Объединить все Выбрать Вагон, Период Из РС2) Сгруппировать по Вагон 
это аналог среза последних который строит платформа при формировании SQL запроса, только для двух таблиц. Ну и результат соединить с РС1 и РС2.
15. spacecraft 29.06.22 17:25 Сейчас в теме
(13) создать 2 временные таблицы.
В первой, получить данные из первого РС.
Во второй получить из второго РС.
в итогом запросе выбрать из справочника и соединить левым соединением из обоих временных таблиц.
И уже через ВЫБОР получать необходимые значения.
16. dakork 33 29.06.22 18:12 Сейчас в теме
(5)Можно также сделать упорядочивание по Дате и Выбрать первые 1
17. user645801_yyyuuu123q 30.06.22 01:24 Сейчас в теме
(16) Тоже не плохо, но только там будет много значений. Если бы 1 выбирал ок, а будет 1+
7. Alexponenta 29.06.22 15:18 Сейчас в теме
Запрос с подзапросом?
Оставьте свое сообщение

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