Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Непростой sql запрос

19K
15 декабря 2010 года
Vanzo
16 / / 15.07.2007
Таблица такая:
<date>,<ticker>,<x>,<avgx>
<ticker> - это название акции, значение которой в день <date> равно <x>, <avgx> пустое

для каждого <ticker> надо заполнить <avgx> следующим образом:
<avgx> = среднее значение <x> за последние 30 дней

Долго ломаю голову, наврено это надо делать програмно несколькими запросами, но хочется конечно изящного решения :)

БД Access 2007

спасибо
385
16 декабря 2010 года
SomewherSomehow
477 / / 25.07.2004
вот вам запрос
Код:
select
    t1.date,
    t1.ticker,
    t1.x,
    t1.avgx,
    count(*),
    sum(t2.x),
    avg(t2.x)
from
    t t1
    left join t t2 on t1.ticker = t2.ticker and t2.date < t1.date and (t1.date - t2.date) <= 30
group by
    t1.date,
    t1.ticker,
    t1.x,
    t1.avgx
order by
    t1.ticker,
    t1.date

работает (даж проверил в акцессе)
в последней колонки ваше среднее значение за 30 дней, если первые записи не имеют запаса по глубине дат в 30 дней - берется среднее по тем что имеется (если нужно чтобы по ним не считалось среднее уберите знак меньше в последнем условии), соотв.первая запись вообще не имеет срднего. остальные колонки - сумма и каунт - оставил просто чтоб понятнее было что делает запрос. Ну и в синтаксисе акцесса я не силен и чес.говоря разбираться не хочу, так что как там делать апдейты из результатов запроса (и можно ли) разберитесь уж сами, в мсскуэль это было бы примерно так
Код:
update t1
set
    t1.avgx =  avg(t2.x)
from
    t t1
    left join t t2 on t1.ticker = t2.ticker and t2.date < t1.date and (t1.date - t2.date) <= 30
group by
    t1.date,
    t1.ticker,
    t1.x,
    t1.avgx
order by
    t1.ticker,
    t1.date

но акцесс так просто не сдается там как-то все по-особенному.=)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог