Вход | Регистрация


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
(3)спасибо!
(4) конечно ссылки, эт я для простоты понимания так написал :)
будем курить join запросы
   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
(29) да!!!!!
спасибо добрый человек, здоровья тебе и всем близким :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует