Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Последние значения из _1sconst (число прочтений - 2155 )
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Последние значения из _1sconst
18. Октября 2007 :: 16:30
Печать  
Нужно получить значения всех периодических реквизитов на дату.
Запрос впринципе написал:
Код
Выбрать все
select
  c.objid                           [objid],
  c.id                              [id],
  c.value                           [value],
  c.tvalue                          [tvalue]
from
  (
   select
     c.objid,
     c.id,
     max(convert(char(8),c.date,112) + substring('          ',1,10-len(convert(char(10),c.time)))+ rtrim(ltrim(convert(char(10),c.time))) + rtrim(ltrim(convert(char(10),c.row_id)))) row_id
   from
    _1sconst c
   where
     date < '20060101' and
     date <> '17530101'
   group by
     c.objid,
     c.id
  ) vt
inner join
 _1sconst c on c.row_id = convert(int,substring(vt.row_id,19,len(vt.row_id)-18))
 


но смущает куча преобразований типов. Может можно как-то оптимальней? По идее функция max() ведь возвращает значение из какой-то строки, может можно как-то выцепить эту строку, чтобы не писать это:
max(convert(char(8),c.date,112) + substring('          ',1,10-len(convert(char(10),c.time)))+ rtrim(ltrim(convert(char(10),c.time))) + rtrim(ltrim(convert(char(10),c.row_id)))) row_id
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Последние значения из _1sconst
Ответ #1 - 19. Октября 2007 :: 04:25
Печать  
Неправильно ведь написал-то.
1) для нахождения ключа последней записи надо использовать поля (date, time, iddoc), а не (date, time, row_id).
2) цеплять таблицу снова для получения значений надо еще по каждому (id, objid), иначе туфта будет.
3) цеплять таблицу снова для получения значений надо также (еще и) именно по кючу в пункте (1).
  
Наверх
ICQ  
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Последние значения из _1sconst
Ответ #2 - 19. Октября 2007 :: 08:36
Печать  
хм, то есть так?
Код
Выбрать все
select
  c.objid                           [objid],
  c.id                              [id],
  c.value                           [value],
  c.tvalue                          [tvalue]
from
  (
   select
     c.objid,
     c.id,
     max(convert(char(8),c.date,112) + substring('          ',1,10-len(convert(char(10),c.time)))+ rtrim(ltrim(convert(char(10),c.time))) + c.docid) row_id
   from
    _1sconst c
   where
     date < '20060101' and
     date <> '17530101'
   group by
     c.objid,
     c.id
  ) vt
inner join
 _1sconst c on (convert(char(8),c.date,112) + substring('          ',1,10-len(convert(char(10),c.time)))+ rtrim(ltrim(convert(char(10),c.time))) + c.docid) = vt.row_id
            and vt.objid = c.objid and vt.id = c.id
 



так результат будет одинаковый, что и в первом запросе, проверил Круглые глаза
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Последние значения из _1sconst
Ответ #3 - 19. Октября 2007 :: 09:11
Печать  
alexdd писал(а) 19. Октября 2007 :: 08:36:
хм, то есть так?
так результат будет одинаковый, что и в первом запросе, проверил Круглые глаза

Да, так. Результат МОЖЕТ быть одинаковым. А ты не понимаешь, что не на любых данных он будет одинаковым?
Если не понимаешь, - тогда беда, подумай.
  
Наверх
ICQ  
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Последние значения из _1sconst
Ответ #4 - 19. Октября 2007 :: 09:40
Печать  
да, точно..протупил Печаль
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать