基于日期的平均价格

时间:2020-03-04 04:18:44

标签: sql oracle

我正在尝试计算每周平均值,并将其作为新列添加到已有数据的旁边。我添加了星期开始日期和星期结束日期,因为我认为这将很有用(以及如何在更熟悉的MS Excel环境中找到它)。

SELECT 
settlementdate as Trading_Interval,
rrp as Trading_Interval_QLD_RRP, 
NEXT_DAY(TRUNC(settlementdate-7),'MONDAY')AS Week_Starting, 
NEXT_DAY(TRUNC(settlementdate),'SUNDAY')AS Week_Ending
FROM fullauth.tradingprice
WHERE settlementdate > to_date('31/12/2019','dd/mm/yyyy') 
AND settlementdate <= to_date('01/01/2020','dd/mm/yyyy')
AND regionid = 'QLD1'
ORDER BY settlementdate DESC;

此代码返回一个包含4列的表。我想找到Trading_Interval介于Week_Starting和Week_Ending日期之间时的Trading_Interval_QLD_RRP的平均价格,并将此每周价格插入/创建为新列

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用AVG作为分析函数,如下所示:

SELECT 
settlementdate as Trading_Interval,
rrp as Trading_Interval_QLD_RRP, 
NEXT_DAY(TRUNC(settlementdate-7),'MONDAY')AS Week_Starting, 
NEXT_DAY(TRUNC(settlementdate),'SUNDAY')AS Week_Ending,
-- required changes as following
AVG(Trading_Interval_QLD_RRP) OVER (PARTITION BY TRUNC(settlementdate,'IW')) AS AVG_RRP 
FROM fullauth.tradingprice
WHERE settlementdate > to_date('31/12/2019','dd/mm/yyyy') 
AND settlementdate <= to_date('01/01/2020','dd/mm/yyyy')
AND regionid = 'QLD1'
ORDER BY settlementdate DESC;

另外,请注意TRUNC(settlementdate,'IW')NEXT_DAY(TRUNC(settlementdate-7),'MONDAY')是相同的。

干杯!