我有一个名为
的表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或任何一天,但是小于或等于上一周的周末。
获取周末和周开始日期的任务可以在不同的查询中完成。但我想在单个查询中将其用作范围并获得所需的平均值。
答案 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)。