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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как расчитать среднюю, помогите расчитать скользящую среднюю 
:(
    Опции темы
Arem4ик
Дата 14.7.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ПОМОГИТЕ! smile  

Есть таблица, в ней 7 полей, 
По одному из полей необходимо рассчитать среднее значение, 
при этом в расчете средней должны участвовать только ТРИ значения (строки). 
Результат должен выводиться в одну строку. 
В следующей строке должно быть следующее среднее по трем значением на строку ниже! 

Как делать в Excel знаю, но Excel не может обработать нужный массив данных! 
Помогите разобраться с Access'ом!!!  smile 
PM MAIL   Вверх
bopoha
Дата 15.7.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

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



Arem4ик, в SQL есть функция AVG.

Например, 
Код

SELECT AVG(поля) as новое_имя FROM таблица WHERE условие


Это сообщение отредактировал(а) bopoha - 15.7.2009, 11:59
PM MAIL WWW ICQ Skype GTalk   Вверх
FINANSIST
Дата 26.7.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


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

Репутация: 1
Всего: 23



bopoha, перед тем как давать советы - рекомендую ознакомиться с понятием "скользящая средняя", акцент на слове "скользящая".

Arem4ик, сразу вопрос - скользящая со смещением вперёд относительно текущей Xi или назад?
Допустим есть исходная таблица (набил пример в Excel) где рассчитаны скользящие вперед и назад для выборки N = 3
user posted image
тогда функция для смещения назад будет выглядеть так:
Код

Public Function SlidingAvg(dat As Variant)
Static cnt As Integer: Static MyMass(1 To 3) As Variant: Static Recently As Date: Let Recently = Now()
If Now() - Recently > 0 Then cnt = 0 'зануляем кол-во входящих независимых переменных по тайм-ауту
cnt = cnt + 1
Select Case cnt
    Case 1
        MyMass(1) = dat
        Let SlidingAvg = Empty
    Case 2
        MyMass(2) = dat
        Let SlidingAvg = Empty
    Case 3
        MyMass(3) = dat
        Let SlidingAvg = (MyMass(1) + MyMass(2) + MyMass(3)) / 3
    Case Else
        MyMass(1) = MyMass(2)
        MyMass(2) = MyMass(3)
        MyMass(3) = dat
        Let SlidingAvg = (MyMass(1) + MyMass(2) + MyMass(3)) / 3
End Select
End Function

Тогда результат запроса
Код

SELECT Лист3.данные, SlidingAvg(Лист3!данные) AS UserФункция, Лист3.[средняя назад]
FROM Лист3;

Будет выглядеть так (Есть база во вложении):
user posted image
Правда к моему позору я так и не смог занулить первые два результата несмотря на Let SlidingAvg = Empty (в чём причина - я так и не понял) 
Что касается Скользящей средней со смещением вперед, то пользуйся Excel - мой тебе совет, ибо мучение с рекордсетами в данном случае не очень продуктивно


Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  ___________Microsoft_Office_Access.rar 17,97 Kb


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
bopoha
Дата 27.7.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

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



Цитата(FINANSIST @  26.7.2009,  18:16 Найти цитируемый пост)
bopoha, перед тем как давать советы - рекомендую ознакомиться с понятием "скользящая средняя", акцент на слове "скользящая".

Ознакомился. И ничем не отличается от обычного среднего. Только для экономистов разница.

Arem4ик, SQL запрос написать не получится. А если и получится, то через такие танцы с бубном. Быстрее (написать и работать будет) и надежней посчитать при помощи VBA а результат записать в промежуточную таблицу.
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 27.7.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(bopoha @  27.7.2009,  13:54 Найти цитируемый пост)
SQL запрос написать не получится. А если и получится, то через такие танцы с бубном

Если есть поле сортировки - ничего сложного. Тройное перемножение таблицы на себя.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FINANSIST
Дата 3.8.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


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

Репутация: 1
Всего: 23



Цитата(Akina @  27.7.2009,  20:44 Найти цитируемый пост)
Если есть поле сортировки - ничего сложного. Тройное перемножение таблицы на себя. 

Поподробнее, маэстро


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
Akina
Дата 3.8.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(FINANSIST @  3.8.2009,  22:57 Найти цитируемый пост)
Поподробнее

Ну, скажем, имеется таблица с двумя полями ID и Val. Для простоты будем считать, что ID полследовательно инкрементный и не имеет дырок. Подумай, что даст вот такой запрос:
Код

select t1.val, t2.val, t3.val
from tab as t1
join tab as t2 on t1.id=t2.id-1
join tab as t3 on t2.id=t3.id-1



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

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

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

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


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

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


 




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


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

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