Получайте данные за каждую неделю в среднем по высоким и низким ценам - PullRequest
0 голосов
/ 21 мая 2018

У меня есть таблица с именем

FP_BASIC_BD

, структура которой выглядит следующим образом.

Name           Null?    Type         
-------------- -------- ------------ 
FS_ID          NOT NULL VARCHAR2(20) 
DATE           NOT NULL DATE         
CURRENCY                CHAR(3)      
PRICE                 FLOAT(126)   
PRICE_OPEN            FLOAT(126)   
PRICE_HIGH            FLOAT(126)   
PRICE_LOW             FLOAT(126)   
VOLUME                FLOAT(126)   

Для любого значения FS_ID я хотел бы рассчитать

weekends date
week start date
average(High of PRICE_HIGH+Low of PRICE_LOW)

за все недели.

Выходные считаются Пятница Если данные по пятницам недоступны, попробуйте получить 1 или любой день до, но после или равный Понедельник этой недели.

Неделя начала считается Понедельник .Если данные по понедельникам недоступны, тогда получите 1 или любой день вперед, но меньше или равный выходным на предыдущем шаге.

Задача получения дат начала недели и выходных может быть выполнена в другом запросе.Но я хочу использовать его как диапазон в одном запросе и получить требуемое среднее значение.

1 Ответ

0 голосов
/ 21 мая 2018

Во-первых, , пожалуйста не используйте ключевые слова Oracle (например, дата ) в качестве имен столбцов.Во-вторых, ваше описание того, как вы хотите рассчитать среднее значение, является неоднозначным, поэтому я включил несколько вариантов.

Я думаю, что это должно сработать, чтобы получить даты начала / окончания недели.

select
    trunc("DATE", 'IW') as week,
    min(trunc("DATE")) as week_start,
    max(trunc("DATE")) as week_end,
    (max(price_high) + min(price_low)) / 2 as avg_price_weekly,
    avg(price_high+price_low) as avg_price_daily
from fp_basic_bd
where to_char("DATE", 'DY') not in ('SAT','SUN')
group by trunc("DATE", 'IW');

Из вашего описания, я предполагаю, что у вас нет дат субботы / воскресенья в этой таблице,Если вы это сделаете, и вы специально хотите исключить их из этого запроса, дайте мне знать, и я обновлю свой ответ.

Изменить: обновлено, чтобы исключить выходные дни (сб / вс).

...