获取每周平均价格高低的数据

时间:2018-05-21 12:03:53

标签: oracle subquery correlated-subquery

我有一个名为

的表
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 :(得分:1)

首先,不要使用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');

根据您的说明,我猜测您在此表中没有任何星期六/星期日的日期。如果您这样做,并且您特别希望将其排除在此查询之外,请告诉我,我会更新我的回答。

编辑:更新以排除周末(sat / sun)。