Форум: "Базы";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
ВнизПодскажите оптимальное решение! Найти похожие ветки
← →
Hro (2002-10-04 23:00) [0]Доброе время :)
Никак немогу додуматься как реализвать следующий алгоритм.
Есть таблица следующей структуры
subj_id int
param_date datetime
param_n int
param_val numeric
param_n находится в диапозоне 1..24
Скажу сразу что это таблица суточных почасовых графиков субъектов где param_n как раз и есть номер часа (понимаю что странно но так уж получилось). Необходимо проделать следующий update: если (param_val i+1-ого часа > param_val i-ого and param_val i+2-ого часа < param_val i-ого) или (param_val i+1-ого часа < param_val i-ого and param_val i+2-ого часа > param_val i-ого) то param_val i+1-ого и param_val i+2-ого часов = их среднему (param_val i+1-ого + param_val i+2-ого)/2
если уреднение проведено то переходим к i+2 часу если нет то к i+1 и делаем тоже самое.
Это нужно проделать для данных всех субъектов за месяц.
Заранее благодарю всех кто откликнется.
← →
oss (2002-10-05 01:12) [1]ничего себе %)
пиши сразу запрос, ато так ничего не понятно
← →
ЮЮ (2002-10-05 11:13) [2]Честно говоря, алгоритм не страдает однозначностью :-)
Пусть имеем значения:
2 1 3 4 4 4 4 4 ...
Применив алгоритм в 1-й раз, получим:
2 2 2 4 4 4 4 4 ...
Но и на полученном ряде, алгоритм продолжает работать. Применим его ещё раз и получим уже:
2 2 3 3 4 4 4 4 ...
И т.д. Что, по-моему, не есть хорошо. Т.е. в БД ещё прийдется отмечать, что уреднение проведено.
А как делать? Ну уж одни запросом уж точно не получится :-). Или в клиенте, или в хранимой процедуре. Считывать, пересчитывать, перезаписывать.
А лучше избавиться от этого геморроя и при добавлении новой записи сделать это самое усреднение для предыдущего часа и этой записи
← →
Hro (2002-10-05 12:39) [3]>> oss © Если б мог написать запрос то не беспокоил бы людей понапрасну.
>> ЮЮ ©
во-первых в приведенном тобой примере усредняются только 2 и 3 значения т.е. получаем 2 2 2 4 4 4 4 4
т.к. после первого шага i=3 и дальше во всем ряде нет условия что (param_val i+1 > param_val i and param_val i+2 < param_val i)
or (param_val i+1 < param_val i and param_val i+2 > param_val i)
во-вторых от этого геморроя избавиться никак не получится т.к. эти данные уже есть в таблице и их надо обрабатывать.
← →
ЮЮ (2002-10-05 12:47) [4]Я так и написал:
2 2 2 4 4 4 4 4 ...
Но, предположим, что кто-то опять запустил эту же процедуру усреднения на уже усреднённые данные. И вот теперь получим:
2 2 3 3 4 4 4 4 ...
Я писал именно об этом. Что при повторном усреднении уже усреднённых данных алгоритм персчитает эти значения.
← →
BlackTiger (2002-10-05 12:57) [5]Не знаю каким местом, но чую, что тот "человек", который проводил анализ процессов, был абсолютно некомпетентен и сделал все (алгоритм работы)"по-быстрому, лишь бы работало".
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c