You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle查询如何获取年份及annualized_return的首尾行结果

解答

完全可以获取你需要的两类结果,先修正你提供的SQL里两处会直接报错的笔误:

  • 建表语句里2020年数据行末尾漏写UNION ALL,不符合UNION拼接语法
  • 查询语句里写的表名是tbl,实际你创建的表名为t,执行会报表不存在错误

筛选实现方法

annualized_return是多步函数计算得到的浮点型结果,直接用等值判断容易因为浮点精度问题漏匹配,建议用差值范围做匹配,把窗口计算部分放在子查询里,外层加WHERE条件筛选即可,完整可运行代码如下:

SELECT *
FROM (
    SELECT YEARS,
           PERCENTAGE,
           ROUND(
             (EXP(SUM(LN(1 + PERCENTAGE/100)) OVER(ORDER BY Years)) - 1)*100,
             2
           ) AS ACCUMULATIVE,
           ROUND(
             POWER(
               EXP(SUM(LN(1 + PERCENTAGE/100)) OVER(ORDER BY Years)),1/COUNT(*) OVER (ORDER BY Years)) * 100 - 100,2
           ) AS annualized_return
    FROM   t
) calc_result
WHERE 
  YEARS = 2014 -- 筛选2014年的首行结果
  OR ABS(annualized_return - 16.71) < 0.001; -- 兼容浮点精度,匹配年化收益16.71的记录

返回结果说明

执行后会得到2条符合要求的记录:

  1. 2014年的首行记录:当年PERCENTAGE为38.15,对应年化收益率和当年收益率一致
  2. 累计计算到对应年份的记录:四舍五入保留2位小数后年化收益率恰好为16.71

注意:不要直接写annualized_return = 16.71做筛选,浮点数存储和计算存在微小精度误差,直接等值匹配大概率无法命中目标行。

内容的提问来源于stack exchange,提问作者user19427142

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:21:23