Имя: Пароль:
1C
1С v8
Выбрать последний документ(ы) на дату
,
0 AlecoZAV
 
05.10.11
10:51
Сделал запрос

ВЫБРАТЬ
                  |    УслугиДок.Ссылка
                  |ИЗ
                  |    Документ.Услуги КАК УслугиДок
                  |ГДЕ
                  |    УслугиДок.Дата <= &Дата
                  |    И УслугиДок.Кабинет = &Кабинет
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    УслугиДок.Ссылка
                  |
                  |ИМЕЮЩИЕ
                  |    УслугиДок.Дата = МАКСИМУМ(УслугиДок.Дата)

а он выбирает все документы за все даты. Как сделать чтоб он выбирал только последний документ, или документы, если дата время полностью совпадает
1 Повелитель
 
05.10.11
10:52
Выбрать Первые 1

И сортировку по дате

а это
|ИМЕЮЩИЕ
                  |    УслугиДок.Дата = МАКСИМУМ(УслугиДок.Дата)
не надо
2 PR
 
05.10.11
10:52
МоментВремени
3 AlecoZAV
 
05.10.11
10:53
Первые 1 нельзя, может быть два документа с одним датой-временем
4 AlecoZAV
 
05.10.11
10:53
(2) поясни
5 Amiralnar
 
05.10.11
10:54
(3) А зачем они нужны?
6 AlecoZAV
 
05.10.11
10:55
(5) с образовательной точки зрения, задача виртуальная
7 sda553
 
05.10.11
11:08
Выбрать первые 1 Максимум(УслугиДок.Ссылка) Как ПоследнийДокСсылка
Из
Документ.Услуги КАК УслугиДок
Где
(УслугиДок.Дата) В
(
ВЫБРАТЬ
                  | Максимум(УслугиДок.Дата) ДатаДок
                  |ИЗ
                  |    Документ.Услуги КАК УслугиДок
                  |ГДЕ
                  |    УслугиДок.Дата <= &Дата
                  |    И УслугиДок.Кабинет = &Кабинет

) ТабСреза
И УслугиДок.Кабинет = &Кабинет
8 AlecoZAV
 
05.10.11
11:12
(7) НЕЛЬЗЯ первые 1
9 sda553
 
05.10.11
11:12
(8) Можно, я разрешаю
10 Amiralnar
 
05.10.11
11:13
(9) нет, там первые 1 не надо. но без них работает првильно.
11 Amiralnar
 
05.10.11
11:14
(6) В условии подзапрос на максимальную дату.
12 sda553
 
05.10.11
11:14
(10) Если задача поставлена так, что если последних документов несколько с одинаковой датой, то надо вернуть несколько - тогда ПЕРВЫЕ 1 не надо.

А если гарантированно надо получить один самый последний документ, то надо
13 sda553
 
05.10.11
11:15
а..ну да первые 1 не надо, у меня же максимум, гоню
14 Amiralnar
 
05.10.11
11:16
Я не пробовал, а по МоментВремени сортировать можно?
15 sda553
 
05.10.11
11:17
момент времени это ДатаДок+Ссылка, так что сортировка вида
УПОРЯДОЧИТЬ ПО Док.Дата,Док.Ссылка и есть сортировка по моменту времени
16 unregistered
 
05.10.11
11:17
(15) +100500
так что ПЕРВЫЕ 1 вполне допустимы.
17 sda553
 
05.10.11
11:18
(16) Нет, в моем запросе ПЕРВЫЕ 1 не нужны т.к. запрос выбирает Максимум и он в любом случае только 1 строчку или 0 строчек результата возвращает
18 unregistered
 
05.10.11
11:21
(17) Я не про твой запрос. Проще использовать вариант (1) - обычная выборка без группировок и вложенных запросов с упорядочивание по Дата+Ссылка.
19 AlecoZAV
 
05.10.11
11:25
(7) попробовал, есть два документа, совпадают дата и время, но в выборку попал один
20 SeregaMW
 
05.10.11
11:27
Сначало найди последний документ потом по дате и времени найди ему соответствующие!
21 AlecoZAV
 
05.10.11
11:36
(20) а одним запросом?
22 sda553
 
05.10.11
11:37
(19) см. (12) если тебе нужны эти несколько документов то
Выбрать УслугиДок.Ссылка Как ПоследнийДокСсылка

Из
Документ.Услуги КАК УслугиДок
Где
(УслугиДок.Дата) В
(
ВЫБРАТЬ
                  | Максимум(УслугиДок.Дата) ДатаДок
                  |ИЗ
                  |    Документ.Услуги КАК УслугиДок
                  |ГДЕ
                  |    УслугиДок.Дата <= &Дата
                  |    И УслугиДок.Кабинет = &Кабинет

)
И УслугиДок.Кабинет = &Кабинет
23 sda553
 
05.10.11
11:38
(18) У него задача несколько другая, неизвестно заранее один там будет документ или два и ему надо чтобы запрос вернул несколько последних документов с одной датой
24 AlecoZAV
 
05.10.11
11:43
(22) получилось, огромное спасибо\