Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Помогите с запросом (число прочтений - 2377 )
bernc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Сентября 2015
Помогите с запросом
16. Октября 2015 :: 08:34
Печать  
SEL *
FROM(
SEL
  Документы1.ДатаДок
  Документы1.Поле1
  Документы1.Поле2
FROM Документы1
UNION
 SEL
  Документы2.ДатаДок
  Документы2.Поле1
  Документы2.Поле2
FROM Документы2
UNION
 SEL
  Документы3.ДатаДок
  Документы3.Поле1
  Документы3.Поле2
FROM Документы3
)

Надо выбрать все документы при чем если был сделан документ в один день надо выбрать последний.
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 278
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите с запросом
Ответ #1 - 16. Октября 2015 :: 09:49
Печать  
bernc писал(а) 16. Октября 2015 :: 08:34:
SEL *
Надо выбрать все документы при чем если был сделан документ в один день надо выбрать последний.

Последний - max(iddoc) при группировке по iddocdef или если выборка из таблицы документа.
Ну и UNION ALL вместо UNION - это уже ясно.
В чём проблема с запросом?
  
Наверх
 
IP записан
 
bernc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Сентября 2015
Re: Помогите с запросом
Ответ #2 - 16. Октября 2015 :: 10:48
Печать  
pavel_tr писал(а) 16. Октября 2015 :: 09:49:
bernc писал(а) 16. Октября 2015 :: 08:34:
SEL *
Надо выбрать все документы при чем если был сделан документ в один день надо выбрать последний.

Последний - max(iddoc) при группировке по iddocdef или если выборка из таблицы документа.
Ну и UNION ALL вместо UNION - это уже ясно.
В чём проблема с запросом?


надо выбрать все документы(не самый последний), но если в один и тот же день сделали два документа, то надо выбрать последний.

  

___________008.jpg ( 43 KB | Загрузки )
___________008.jpg
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 278
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите с запросом
Ответ #3 - 16. Октября 2015 :: 10:54
Печать  
bernc писал(а) 16. Октября 2015 :: 10:48:
надо выбрать все документы(не самый последний), но если в один и тот же день сделали два документа, то надо выбрать последний.

Выбирать вообще все документы, которые есть в базе?
Если сделали два документа одного вида в один день, то выбирать последний из них?
Т.е. получится максимум по одному документу каждого вида за день?
  
Наверх
 
IP записан
 
bernc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Сентября 2015
Re: Помогите с запросом
Ответ #4 - 16. Октября 2015 :: 10:59
Печать  
pavel_tr писал(а) 16. Октября 2015 :: 10:54:
bernc писал(а) 16. Октября 2015 :: 10:48:
надо выбрать все документы(не самый последний), но если в один и тот же день сделали два документа, то надо выбрать последний.

Выбирать вообще все документы, которые есть в базе?
Если сделали два документа одного вида в один день, то выбирать последний из них?
Т.е. получится максимум по одному документу каждого вида за день?


Не все документы а только к примеру 3.
Вид 1 выбрать последний, если их 2  и более
Вид 2 выбрать последний, ....
Вид 3 выбрать последний, ....
  
Наверх
 
IP записан
 
bernc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Сентября 2015
Re: Помогите с запросом
Ответ #5 - 16. Октября 2015 :: 11:01
Печать  
Вот примерно так

SEL *
FROM(
SEL -- все документы в базе за все даты, но если в какой-то день два документа и более выбрать последний в этом дне
 Документы1.ДатаДок
 Документы1.Поле1
 Документы1.Поле2
FROM Документы1
UNION
SEL  -- все документы в базе за все даты, но если в какой-то день два документа и более выбрать последний в этом дне
 Документы2.ДатаДок
 Документы2.Поле1
 Документы2.Поле2
FROM Документы2
UNION
SEL  -- все документы в базе за все даты, но если в какой-то день два документа и более выбрать последний в этом дне
 Документы3.ДатаДок
 Документы3.Поле1
 Документы3.Поле2
FROM Документы3
)
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 278
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите с запросом
Ответ #6 - 16. Октября 2015 :: 11:02
Печать  
select
max(j.date_time_iddoc)
,j.iddocdef
from _1sjourn j
group by left(j.date_time_iddoc, 8), j.iddocdef
order by max(j.date_time_iddoc)

Если нужно ограничить видом документа - ставь условие Where j.iddocdef in ($ВидДокумента.Документ1,$ВидДокумента.Документ2)
  
Наверх
 
IP записан
 
bernc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Сентября 2015
Re: Помогите с запросом
Ответ #7 - 16. Октября 2015 :: 11:12
Печать  
pavel_tr писал(а) 16. Октября 2015 :: 11:02:
select
max(j.date_time_iddoc)
,j.iddocdef
from _1sjourn j
group by left(j.date_time_iddoc, 8), j.iddocdef
order by max(j.date_time_iddoc)

Если нужно ограничить видом документа - ставь условие Where j.iddocdef in ($ВидДокумента.Документ1,$ВидДокумента.Документ2)


А если к примеру я хочу выбрать последний документ за день, но день будет реквизитом документа?
  
Наверх
 
IP записан
 
pavel_tr
Senior Member
****
Отсутствует



Сообщений: 278
Местоположение: Казань
Зарегистрирован: 14. Октября 2006
Пол: Мужской
Re: Помогите с запросом
Ответ #8 - 16. Октября 2015 :: 11:20
Печать  
А, вот что!
Если этот реквизит отбора - общий и по нему стоит отбор, то он есть в таблице _isjourn. Если нет - тогда по вашему шаблону придётся вытаскивать данные из таблиц DH документов. Примерно так:

select
max(док1.iddoc)
,$док1.РеквизитДата
from $Документ.Док1 as док1
group by $док1.РеквизитДата

Между собой подзапросы объединяйте с помощью UNION ALL
  
Наверх
 
IP записан
 
bernc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 16
Зарегистрирован: 28. Сентября 2015
Re: Помогите с запросом
Ответ #9 - 16. Октября 2015 :: 11:29
Печать  
pavel_tr писал(а) 16. Октября 2015 :: 11:20:
А, вот что!
Если этот реквизит отбора - общий и по нему стоит отбор, то он есть в таблице _isjourn. Если нет - тогда по вашему шаблону придётся вытаскивать данные из таблиц DH документов. Примерно так:

select
max(док1.iddoc)
,$док1.РеквизитДата
from $Документ.Док1 as док1
group by $док1.РеквизитДата

Между собой подзапросы объединяйте с помощью UNION ALL


Спасибо. Очень довольный
Понял куда копать.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать