Имя: Пароль:
1C
1С v8
Подскажите с запросом
,
0 бегинер
 
13.09.16
10:42
есть две таблицы:
1) справочник_посетители
поля: фамилия и т.д.
2) регистр
поля: фамилия, дата_посещения

нужно получить табличку:
фамилия, дата_последнего_посещения

счас сделал: выборку всех элементов справочника, потом в цикле делаю запрос на каждый элемент аля "выбрать первые 1 .... упорядочить дата_посещения убыв"

одним запросом это можно сделать? если да - то направьте на путь истинный :)

в запросах не особо разбираюсь
1 vicof
 
13.09.16
10:43
путь истинный - курс по запросам
2 vicof
 
13.09.16
10:43
тебя спасет левое соединение
3 butterbean
 
13.09.16
10:47
просто выбираешь из регистра Фамилия, МАКСИМУМ(дата_посещения) и СГРУППИРОВАТЬ ПО Фамилия
4 butterbean
 
13.09.16
10:48
(3) хотя я очень надеюсь, что у тебя все-таки не фамилии в регистре, а ссылки на справочник
5 vicof
 
13.09.16
10:50
(4) Таки может быть парню надо всех посетителей, а не только тех, кто посещал
6 butterbean
 
13.09.16
10:51
(5) хз, но что это за посетитель, который не посещал...
7 бегинер
 
13.09.16
10:53
(3)спасибо!
(4) конечно ссылки, эт я для простоты понимания так написал :)
будем курить join запросы
8 vicof
 
13.09.16
10:53
(6) сейчас протру свой магический шар
9 iceman2112
 
13.09.16
10:55
в запросах не особо разбираюсь
10 iceman2112
 
13.09.16
10:56
вот это профессионально
11 Torquader
 
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) регистр
поля: фамилия, дата_посещения, !!!филиал!!!

нужно получить табличку:
фамилия, дата_последнего_посещения, филиал

т.е. филиал в котором он последний раз был.

если без филиала делал как советовали:
"справочник_посетители соединял левым соединением с регистром, группировка по фамилии и выводил максимум (дата_посещения)"

теперь же добавился филиал, и теперь когда соединим через левое соединение - то будут на каждую фамилию - несколько филиалов, с максимальной датой по каждому филиалу.

а мне нужен только один филиал на который приходится последнее посещение.

запросом такое получиться?
подскажите гуру запросов :)
15 youalex
 
13.09.16
15:29
(14) получай максимальную дату поступления из регистра. цепляй снова с регистром - по посетителю и дате.
16 бегинер
 
13.09.16
15:33
(15) предлагаете вариант с циклом? или в одном запросе это можно реализовать?
17 ViSo76
 
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
20 youalex
 
13.09.16
15:52
(16) в одном запросе  
Первое действие у  тебя уже есть:  ВЫБРАТЬ МАКСИМУМ(), можешь этот результат поместить во временную таблицу:
выбрать максимум(Дата), Посетитель
ПОМЕСТИТЬ вт_МаксДаты
СГРУППИРОВАТЬ ПО ;

//2 - запрос - цепляешь к вт_МаксДаты - регистр
21 youalex
 
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
все это делаю в конструкторе запроса в макете отчета, может там эта фича с "Поместить" не работает?
25 jsmith
 
13.09.16
16:58
Ничего себе тут у вас творится
26 jsmith
 
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 записей
29 youalex
 
13.09.16
17:16
(27) >странно что как буд-то второе последнее ЛЕВОЕ соединение ведет себя как внутреннее

оно -  должно быть внутреннее
30 бегинер
 
13.09.16
17:22
(29) да!!!!!
спасибо добрый человек, здоровья тебе и всем близким :)