Имя: Пароль:
1C
1С v8
Оптимизировать запрос
,
0 extrim-style
 
02.02.12
14:56
Можно ли оптимизировать следующий запрос?:

ВЫБРАТЬ
   ЕСТЬNULL(Границы.ГраницаЗапретаИзменений, &ТекДата) КАК ГраницаЗапретаИзменений,
   Границы.Пользователь КАК Пользователь
ПОМЕСТИТЬ ТЗ
ИЗ
   РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
ГДЕ
   Границы.Организация.Код = "000000002"
   И (Границы.Пользователь.Код = 2
           ИЛИ Границы.Пользователь.Код = 3)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   МАКСИМУМ(ТЗ.ГраницаЗапретаИзменений) КАК ГраницаЗапретаИзменений
ПОМЕСТИТЬ ТЗ2
ИЗ
   ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТЗ.ГраницаЗапретаИзменений,
   ТЗ.Пользователь
ИЗ
   ТЗ2 КАК ТЗ2
       ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
       ПО ТЗ2.ГраницаЗапретаИзменений = ТЗ.ГраницаЗапретаИзменений
1 НЕА123
 
02.02.12
14:58
Границы.Организация.Код = "000000002"
   И (Границы.Пользователь.Код = 2
           ИЛИ Границы.Пользователь.Код = 3)
2 golden-pack
 
02.02.12
14:59
код= .... //ненадо так писать
3 DrShad
 
02.02.12
15:00
а сразу выбрать Максимум не?
4 le_
 
02.02.12
15:00
Лучше ссылку вместо кода сравнивать.
5 Reset
 
02.02.12
15:01
Так -->  (3)
6 cw014
 
02.02.12
15:01
Жесть запрос
7 Mort
 
02.02.12
15:02
Это нужно не оптимизировать, а стереть и забыть как страшный сон.
8 extrim-style
 
02.02.12
15:17
(2) всё норм. результат запроса обрабатывается
(3) не получается
9 DrShad
 
02.02.12
15:18
чукча не читатель - чукча писатель?
10 extrim-style
 
02.02.12
15:24
Вот так сразу выбираю масимальное значение, попадает одна запись (как нужно):

ВЫБРАТЬ
   МАКСИМУМ(ЕСТЬNULL(Границы.ГраницаЗапретаИзменений, &ТекДата)) КАК ГраницаЗапретаИзменений
ИЗ
   РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
ГДЕ
   Границы.Организация.Код = "000000002"
   И (Границы.Пользователь.Код = 2
           ИЛИ Границы.Пользователь.Код = 3)

если выбираю еще и пользователя, то попадают 2 записи, как одну отобрать?

ВЫБРАТЬ
   МАКСИМУМ(ЕСТЬNULL(Границы.ГраницаЗапретаИзменений, &ТекДата)) КАК ГраницаЗапретаИзменений,
   Границы.Пользователь
ИЗ
   РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
ГДЕ
   Границы.Организация.Код = "000000002"
   И (Границы.Пользователь.Код = 2
           ИЛИ Границы.Пользователь.Код = 3)

СГРУППИРОВАТЬ ПО
   Границы.Пользователь
11 cw014
 
02.02.12
15:26
Суть задачи
12 DexterMorgan
 
02.02.12
15:30
(10) Ну так значит не выбирай пользователя, мб? У двух пользователей в РС есть ГраницаЗапретаИЗменений...ИЛИ сортируй по УБЫВ и выбирай первую...че те надо то?
13 DexterMorgan
 
02.02.12
15:31
ИЛИ общие итоги
14 extrim-style
 
02.02.12
15:31
(11) Есть 2 группы пользователей. Для каждой группы установлена своя дата запрета изменения данных. В запросе необходимо отобрать самую позднюю дату для этих групп и соответствующую этой дате группу.
15 extrim-style
 
02.02.12
15:39
Границы.Пользователь - это и есть группа пользователей
16 extrim-style
 
02.02.12
15:41
о, кажись понял. отсортировать по возрастанию и выбрать первый 1 =)
17 extrim-style
 
02.02.12
15:43
ВЫБРАТЬ ПЕРВЫЕ 1
   ЕСТЬNULL(Границы.ГраницаЗапретаИзменений, &ТекДата) КАК ГраницаЗапретаИзменений,
   Границы.Пользователь
ИЗ
   РегистрСведений.ГраницыЗапретаИзмененияДанных КАК Границы
ГДЕ
   Границы.Организация.Код = "000000002"
   И (Границы.Пользователь.Код = 2
           ИЛИ Границы.Пользователь.Код = 3)

УПОРЯДОЧИТЬ ПО
   ГраницаЗапретаИзменений УБЫВ
18 DexterMorgan
 
02.02.12
16:17
(17) ЛицоРука
19 Широкий
 
02.02.12
16:22
ЕСТЬNULL(Границы.ГраницаЗапретаИзменений, &ТекДата)
И с чего это у тебя NULL То будет?