Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсивный расчет показателя, как запоминать результаты? 
V
    Опции темы
Ptica
Дата 10.4.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



Здравствуйте!
Проблема такая: допустим, есть таблица MyTable, в структуру которой входят дата (MyDate), некоторый показатель (MyParameter), а также другие параметры (MyField1, MyField2,...). Дата - уникальный ключ.
Конечным потребителем этих данных является запрос вида
Код

select * from MyTable where fn_MyParameter(MyDate) > SomeValue

Записи хранятся за некоторый большой период времени, и в течение этого периода нет пропусков дат. Однако сам показатель MyParameter может быть NULL. Требование такое: функция fn_MyParameter должна возвращать значение показателя на заданную дату. Если же на эту дату он is NULL, то нужно рассчитать его, как среднюю величину за N предыдущих дней. Тут и возникает необходимость в рекурсии. Допустим, на 10 марта показатель is NUll. Выбираем данные за предыдущих 5 дней: на 9, 8, 7 и 5 марта данные есть, а на 6 марта опять нет. Значит, запускаем расчет этого показателя на 6 марта. И так до упора. (Предполагается, что упор в конце концов наступит.)
Собственно с рекурсией проблем нет. Это я могу сделать. Но мне захотелось, чтобы в ходе расчета вычисленные значения показателя тут же вносились в таблицу, дабы потребность в рекурсии постепенно исчезла. Однако суровый сервер сказал, что внутри функции использовать UPDATE не положено. Можно ли как-то это все-таки реализовать?
PM MAIL   Вверх
Vit
Дата 10.4.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Не нужна рекурсия, достаточно нахождения максимума и минимума. Вместо Update - поставить триггер который будет проверять значение на Null при внесении записей. Кстати ключ не может быть Null так что вы делаете что-то не то.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
beroal
Дата 11.4.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 18.1.2003
Где: Украина

Репутация: нет
Всего: 3



Любопытно... Вы хотите сделать ленивые вычисления. Т.е. при запросе отсуствующего значения показателя оно рассчитывается и сохраняется в таблице, чтобы не рассчитываться второй раз. Только не всё так просто. Эти расчётные значения надо пересчитывать, если данные в таблице меняются. Например, если делается UPDATE записи за 9 марта, то надо изменить и показатель за 10 марта.
Пересчёт показателей надо делать перед выполнением запроса. Вызовом хранимой процедуры. Так по-моему будет правильней.
PM WWW   Вверх
Ptica
Дата 17.4.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



beroal
Да. Делать тут ленивые вычисления и правда нехорошо. Ну ладно, спасибо за обсуждение, будем считать тему закрытой. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.