【问题标题】:Get Data for every weeks average of high and low prices获取每周平均高价和低价的数据
【发布时间】:2018-05-21 12:03:52
【问题描述】:

我的表名为

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 或提前但小于或等于周末的任何一天。

获取周末和周开始日期的任务可以在不同的查询中完成。但我想将它用作单个查询中的范围并获得所需的平均值。

【问题讨论】:

    标签: oracle subquery correlated-subquery


    【解决方案1】:

    首先,不要使用 Oracle 关键字(例如 date)作为列名。 其次,您对如何计算平均值的描述不明确,因此我提供了几个选项。

    我认为这应该可以确定您的一周开始/结束日期。

    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');
    

    根据您的描述,我猜您在此表中没有任何周六/周日日期。如果你这样做了,并且你特别想从这个查询中排除它们,请告诉我,我会更新我的答案。

    编辑:更新以排除周末(周六/周日)。

    【讨论】:

    • 您的回答非常正确。请更新此答案以从列表中排除周六和周日。
    猜你喜欢
    • 2021-03-23
    • 2012-01-29
    • 2016-01-26
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2017-05-04
    相关资源
    最近更新 更多