|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
бегинер 13.09.16 - 10:42 | есть две таблицы:
1) справочник_посетители поля: фамилия и т.д. 2) регистр поля: фамилия, дата_посещения нужно получить табличку: фамилия, дата_последнего_посещения счас сделал: выборку всех элементов справочника, потом в цикле делаю запрос на каждый элемент аля "выбрать первые 1 .... упорядочить дата_посещения убыв" одним запросом это можно сделать? если да - то направьте на путь истинный :) в запросах не особо разбираюсь | ||
vicof 1 - 13.09.16 - 10:43 | путь истинный - курс по запросам | ||
vicof 2 - 13.09.16 - 10:43 | тебя спасет левое соединение | ||
butterbean 3 - 13.09.16 - 10:47 | просто выбираешь из регистра Фамилия, МАКСИМУМ(дата_посещения) и СГРУППИРОВАТЬ ПО Фамилия | ||
butterbean 4 - 13.09.16 - 10:48 | (3) хотя я очень надеюсь, что у тебя все-таки не фамилии в регистре, а ссылки на справочник | ||
vicof 5 - 13.09.16 - 10:50 | (4) Таки может быть парню надо всех посетителей, а не только тех, кто посещал | ||
butterbean 6 - 13.09.16 - 10:51 | (5) хз, но что это за посетитель, который не посещал... | ||
бегинер 7 - 13.09.16 - 10:53 | |||
vicof 8 - 13.09.16 - 10:53 | (6) сейчас протру свой магический шар | ||
iceman2112 9 - 13.09.16 - 10:55 | в запросах не особо разбираюсь | ||
iceman2112 10 - 13.09.16 - 10:56 | вот это профессионально | ||
Torquader 11 - 13.09.16 - 11:01 | (7) Чего там "курить" - открыл конструктор и попробовал.
Скоро за каждым нажатием клавиши на мисту ходить будут. | ||
бегинер 12 - 13.09.16 - 11:48 | а можно как-то соединять по разным типам?:
например одно поле1="123"поле2="123 т.е. допускается преобразование типов в запросе? | ||
бегинер 13 - 13.09.16 - 11:48 | поле2=123
так верно, т.е. строка и число | ||
бегинер 14 - 13.09.16 - 15:22 | усложним задание:
1) справочник_посетители поля: фамилия и т.д. 2) регистр
поля: фамилия, дата_посещения, !!!филиал!!!
нужно получить табличку: фамилия, дата_последнего_посещения, филиалт.е. филиал в котором он последний раз был. если без филиала делал как советовали: "справочник_посетители соединял левым соединением с регистром, группировка по фамилии и выводил максимум (дата_посещения)"
теперь же добавился филиал, и теперь когда соединим через левое соединение - то будут на каждую фамилию - несколько филиалов, с максимальной датой по каждому филиалу.
а мне нужен только один филиал на который приходится последнее посещение. запросом такое получиться? подскажите гуру запросов :) | ||
youalex 15 - 13.09.16 - 15:29 | (14) получай максимальную дату поступления из регистра. цепляй снова с регистром - по посетителю и дате. | ||
бегинер 16 - 13.09.16 - 15:33 | (15) предлагаете вариант с циклом? или в одном запросе это можно реализовать? | ||
ViSo76 17 - 13.09.16 - 15:38 | (16) Регистр периодический? Если да, то использовать СрезПоследних | ||
бегинер 18 - 13.09.16 - 15:42 | (18) не периодический | ||
бегинер 19 - 13.09.16 - 15:50 | в 1с в запросе можно делать два раза левое соединение?
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table1.id=table3.id | ||
youalex 20 - 13.09.16 - 15:52 | (16) в одном запросе
Первое действие у тебя уже есть: ВЫБРАТЬ МАКСИМУМ(), можешь этот результат поместить во временную таблицу:
выбрать максимум(Дата), Посетитель
ПОМЕСТИТЬ вт_МаксДаты
СГРУППИРОВАТЬ ПО ;
//2 - запрос - цепляешь к вт_МаксДаты - регистр | ||
youalex 21 - 13.09.16 - 15:53 | (19) да, причем во втором соединении - для связи будут доступны поля обеих (предыдущих) таблиц | ||
бегинер 22 - 13.09.16 - 16:48 | есть список вагонов (аналог фамилии по моему примеру выше) в справочнике, и справочник_архив история его движений (аналог регистра) - дислокация
вот так сделал, но ругается что поле не найдено: Дислокация_архив.номер
ВЫБРАТЬ Список.Код как номер, Максимум(Дислокация.ДатаПолучения) как макс_дата ПОМЕСТИТЬ Дислокация_архив ИЗ справочник.дислокациявагонысписок как Список ЛЕВОЕ СОЕДИНЕНИЕ справочник.дислокациявагоныархив как Дислокация ПО Список.Код=Дислокация.Номер СГРУППИРОВАТЬ ПО Список.Код; /////////////////////////// Выбрать Дислокация2.Номер, Дислокация2.Тип, Дислокация2.Статус ИЗ Справочник.ДислокацияВагоныАрхив КАК Дислокация ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДислокацияВагоныАрхив КАК Дислокация2 ПО Дислокация2.Номер = Дислокация_архив.номер И Дислокация2.ДатаПолучения = Дислокация_архив.макс_дата; | ||
бегинер 23 - 13.09.16 - 16:51 | 1) т.е. сначала сделал выборку: номера вагона и его последняя дата с инфой о его нахождении - поместил во временную таблицу
2) историю движений (ДислокацияВагоныАрхив) не могу соеднить с временной таблицей, ругается что нет полей, как буд-то алиасы не работают эти: Список.Код как номер Максимум(Дислокация.ДатаПолучения) как макс_дата | ||
бегинер 24 - 13.09.16 - 16:55 | все это делаю в конструкторе запроса в макете отчета, может там эта фича с "Поместить" не работает? | ||
jsmith 25 - 13.09.16 - 16:58 | Ничего себе тут у вас творится | ||
jsmith 26 - 13.09.16 - 17:05 | ВЫБРАТЬ
Список.Код как Номер,
Максимум(Дислокация.ДатаПолучения) как Макс_дата
ПОМЕСТИТЬ
ВтДислокацияАрхив
ИЗ
Справочник.ДислокацияВагоныСписок КАК Список
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДислокацияВагоныАрхив КАК Дислокация
ПО Список.Код = Дислокация.Номер
СГРУППИРОВАТЬ ПО
Список.Код;
///////////////////////////
ВЫБРАТЬ
ДислокацияВагоныАрхив.Номер,
ДислокацияВагоныАрхив.Тип,
ДислокацияВагоныАрхив.Статус
ИЗ
Справочник.ДислокацияВагоныАрхив КАК ДислокацияВагоныАрхив
ЛЕВОЕ СОЕДИНЕНИЕ ВтДислокацияАрхив КАК ВтДислокацияАрхив
ПО ДислокацияВагоныАрхив.Номер = ВтДислокацияАрхив.Номер
И ДислокацияВагоныАрхив.ДатаПолучения = ВтДислокацияАрхив.Макс_дата | ||
бегинер 27 - 13.09.16 - 17:06 | вот так заработало, но странно что как буд-то второе последнее ЛЕВОЕ соединение ведет себя как внутреннее
ВЫБРАТЬ Список.Код КАК номер, МАКСИМУМ(Дислокация.ДатаПолучения) КАК макс_дата ПОМЕСТИТЬ Дислокация_архив ИЗ Справочник.ДислокацияВагоныСписок КАК Список ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДислокацияВагоныАрхив КАК Дислокация ПО Список.Код = Дислокация.Номер СГРУППИРОВАТЬ ПО Список.Код ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Дислокация2.Номер, Дислокация2.Тип, Дислокация2.Статус ИЗ Справочник.ДислокацияВагоныАрхив КАК Дислокация2 ЛЕВОЕ СОЕДИНЕНИЕ Дислокация_архив КАК Дислокация_архив ПО Дислокация2.Номер = Дислокация_архив.номер И Дислокация2.ДатаПолучения = Дислокация_архив.макс_дата | ||
бегинер 28 - 13.09.16 - 17:10 | (27) как (26) сделал уже - просто устал уже за весь день - туплю :)
спасибо ВЫБРАТЬ Список.Код КАК номер, МАКСИМУМ(Дислокация.ДатаПолучения) КАК макс_дата ПОМЕСТИТЬ Дислокация_архив ИЗ Справочник.ДислокацияВагоныСписок КАК Список ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДислокацияВагоныАрхив КАК Дислокация ПО Список.Код = Дислокация.Номер СГРУППИРОВАТЬ ПО Список.Код вот в ДислокацияВагоныСписок всего 129 вагонов, а в нашем итоговом запросе как-то больше выходит записей 236 записей | ||
youalex 29 - 13.09.16 - 17:16 | (27) >странно что как буд-то второе последнее ЛЕВОЕ соединение ведет себя как внутреннее
оно - должно быть внутреннее | ||
бегинер 30 - 13.09.16 - 17:22 | Рекламное место пустует |
|
Список тем форума
|