在 CONNECT-BY 查询中未获得完整的系列乘法(乘积)

2024-04-12

我有一个 CONNECT BY 查询,但没有得到所需的结果。

最终的子查询和查询应该产生一串百分比相乘的乘积。

它首先列出了每年的保留百分比 (PCT)。随着查询的进行,它应该将第一年的 PCT 乘以下一年的 PCT,依此类推,直到达到所需的深度。效果应该类似于交叉表中的对角线相乘,其中 YR(年份)和 yset 代表起始行和列。

我只得到最后两个百分比的结果,而不是随着查询的进行获取完整的字符串。

这可能是一个简单的错误,但更多的关注将有助于更快地发现它。

Code:

     with recurreten as
(
select  YR, YSet, 
      rtnpct rtn_year, 
      level lvl, ' - ' s1,   
      rtnpct * nvl( prior rtnpct, 1)  rtnpct 
      --- Below here only for checking the paths
      , sys_connect_by_path( nvl(rtnpct, 1) , '/')  prodpath 
from Z_RETENTIONPCT
    connect by yr = prior yr+1 and yset  = prior yset+1
    start with YR = 1998  -- :StartYr
               and
               yset = 20  -- :StartYSet
)

-- final results
select yr, yset, 
      round(rtn_year * 100, 2 ) rtn_year,   
      lvl, -- years the Cumulative Continuation Rate is extended
      s1,  
      round(rtnpct, 2) CCR  
      --- Below here only for checking results
      , rtnpct CCRFull -- Extra digits, for math check
      , prodpath  -- Only used by us, to check the #'s feeding the CCR
from recurreten
where  lvl <= 10 -- :Depth     
order by yr, yset, lvl
;

我在 SQLFiddle 中设置了一个示例http://sqlfiddle.com/#!4/ce945/1/0 http://sqlfiddle.com/#!4/ce945/1/0
该示例使用WITH 设置一些虚拟数据。

结果示例如下: (期望的结果)

Year    Col     Reten_yr    Full prod    Full Prod Path
1998    20      0.84766     0.847660000  = 0.84766
1999    21      0.77941     0.660674681  = 0.84766 * 0.77941
2000    22      0.78659     0.519680097  = 0.84766 * 0.77941 * 0.78659
2001    23      0.76879     0.399524862  = 0.84766 * 0.77941 * 0.78659 * 0.76879

(当前/错误结果)

Year    Col     Reten_yr    wrong prod   Partial Path
1998    20      0.84766     0.847660000  = 0.84766
1999    21      0.77941     0.660674681  = 0.84766 * 0.77941
2000    22      0.78659     0.613076112  =           0.77941 * 0.78659
2001    23      0.76879     0.604722526  =                     0.78659 * 0.76879

为什么我没有得到完整的(乘法)乘积?我可以做什么来解决这个问题?任何人...?任何人?布勒?

更新:吃一个桃子提供了获得真正累积结果所需的修复。我必须更新该示例,因为我手工定制的示例数据隐藏了常规数据的范围:连续 50 多年的行,每年最多 70 YCS。更新后的查询执行了顺序累积产品,我的要求是“对角顺序累积产品”。我保留了日志添加解决方案并将 CONNECT BY 添加回来。

http://sqlfiddle.com/#!4/1c326/2 http://sqlfiddle.com/#!4/1c326/2

显示起点和深度的一些默认值。

再次感谢!


你需要的是累积乘法。但没有聚合函数或分析函数这样的函数。但数学告诉我们乘法 可以改为使用对数进行加法 https://stackoverflow.com/questions/5416169/mutiplication-aggregate-operator-in-sql.

a * b =  exp(ln(a) + ln(b))

在 SUM 中使用它作为分析函数。无需使用 CONNECT BY 构造。

SQL小提琴 http://sqlfiddle.com/#!4/ce945/2

recurreten as
(
select  YR, YSet, 
      rtnpct rtn_year, 
      round(exp(sum(ln(rtnpct)) over (order by yr, yset rows between unbounded preceding and current row)),2) ccr,
      exp(sum(ln(rtnpct)) over (order by yr, yset rows between unbounded preceding and current row)) ccrfull
from Z_RETENTIONPCT
)
select * from recurreten
order by yr, yset

Results http://sqlfiddle.com/#!4/ce945/2/0:

|   YR | YSET | RTN_YEAR |  CCR |        CCRFULL |
|------|------|----------|------|----------------|
| 1998 |   20 |  0.84766 | 0.85 |        0.84766 |
| 1999 |   21 |  0.77941 | 0.66 |   0.6606746806 |
| 2000 |   22 |  0.78659 | 0.52 | 0.519680097013 |
| 2001 |   23 |  0.76879 |  0.4 | 0.399524861783 |
| 2002 |   24 |  0.80952 | 0.32 |  0.32342336611 |
| 2003 |   25 |  0.76316 | 0.25 | 0.246823776081 |
| 2004 |   26 |  0.82425 |  0.2 | 0.203444497435 |
| 2005 |   27 |   0.6992 | 0.14 | 0.142248392606 |
| 2006 |   28 |  0.77071 | 0.11 | 0.109632258666 |
| 2007 |   29 |    0.702 | 0.08 | 0.076961845583 |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 CONNECT-BY 查询中未获得完整的系列乘法(乘积) 的相关文章

随机推荐

  • 无法使用 hist() 函数对齐日期时间对象直方图中的分箱

    所以我试图绘制一些日期时间对象的直方图 但我永远无法让垃圾箱与条形图对齐 我的代码如下 我首先导入我的内容并声明开始 结束和一天对象 import datetime import matplotlib pyplot as plt end d
  • 按距离对邮政编码邻近搜索进行排序(php/mysql)

    我有一个表 用户邮政编码 其中包含用户的邮政编码 纬度和经度 我在 stackoverflow 上找到了一个函数 可以查找特定半径内的邮政编码 function zipcodeRadius lat lon radius global mys
  • (_hidden#919_:0) 崩溃符号文件内

    我正在尝试手动符号化崩溃日志 因为 Xcode 7 不会为我做这件事 然而 我得出了这个结果 这是什么意思 我能用它做什么 我也使用过atos 它只是给了我相同的地址 我确信我有正确的 dSYM app 和日志 Thanks When yo
  • 是什么破坏了 .net 二进制 (dll) 接口

    考虑两个 net dll 首先 application dll 包含主要业务逻辑和数据访问代码 第二个 webservice dll 主要由 WebMethod 组成 这些 WebMethod 链接到 application dll 的对象
  • 如何在 rmarkdown 中格式化 sessionInfo() ?

    如果我想在 R 中很好地打印 PDF 中的 sessionInfo 我可以使用 toLatex sessionInfo 似乎应该有一个类似的选项让 rmarkdown 在 HTML 中呈现 但我在这里或 Rdocumentation 上找不
  • 如何在android中制作水平滚动视图

    我想做这种水平滚动 看图片 gt gt gt gt XML 文件保存在 res layout main xml 我的 main xml 文件有错误吗 我想用
  • 如何在没有 root 权限的情况下创建多分区 SD 磁盘映像?

    是否可以在没有 root 权限 即无环回挂载 的情况下在 linux 中创建完整的 SD 映像 我正在寻找一种自动化嵌入式系统映像创建的方法 该映像应包含特定的分区结构以及格式化为 FAT 和 ext2 的分区 并填充来自构建系统的文件 最
  • 表达式“b=(b-x)&x”是什么意思?

    假设 x 是一个集合 以下代码将遍历集合 x 的子集 int b 0 do process subset b while b b x x 我读到了有关位操作及其如何用于表示集合的读物 表达什么意思b b x x意思是 它是如何工作的 我熟悉
  • WPF TreeView ObservableCollection 通知示例代码

    我正在尝试编写一个 C WPF 应用程序 但我被 TreeView 和 ObservableCollection 困住了 这是我的 TreeView 项目 Root SubItem SubItem Root SubItem SubItem
  • React:动态导入jsx

    这个问题与将 JSX 文件动态导入 React 相关 基本上 我们有一个主要组件 它根据数据库中存储的结构动态呈现其他组件 动态组件存储在子目录 Components 中 我们静态地将 this 定义为 import CompA from
  • 通过处理 NC_HITTEST 移动控件时设置 SizeAll 光标

    我写了WndProc可移动控件的方法如下 protected override void WndProc ref Message m const int WM NCHITTEST 0x0084 if m Msg WM NCHITTEST b
  • ios::noreplace 的 C++ 替换

    我正在使用 fstream 打开文件进行写入 我不想覆盖现有文件 因此经过一番搜索后 我发现了 ios noreplace 但是当我编译这个时 include
  • sklearn“管道实例尚未安装。”错误,尽管它是

    已经提出了类似的问题 但答案并没有帮助我解决我的问题 即使整个管道都安装了 管道中的 Sklearn 组件也没有安装 https stackoverflow com questions 58704347 sklearn components
  • 雄辩的 MYSQL 语句:WHERE NOT(A OR B)

    我正在开发日期范围重叠功能 可以用 13 个正条件编写该功能来检查日期间隔是否重叠 https en wikipedia org wiki Allen 27s interval algebra https en wikipedia org
  • 播放音频并单击重新启动

    我正在寻找在 HTML5 音频播放器中重新启动音频文件 我定义了一个音频文件和一个play button
  • Python 中的自动 ARIMA 导致趋势拟合预测不佳

    ARIMA 新手 尝试使用自动 ARIMA 在 Python 中对数据集进行建模 我正在使用 auto ARIMA 因为我相信它会更好地定义 p d 和 q 的值 但结果很差 我需要一些指导 请参阅下面我的可重复尝试 尝试如下 DEPEND
  • 如何在标题和桑基图之间添加更多空间?

    我使用 python 和plotly 来创建桑基图 这是标题 副标题的文本和问题的图片 标题与图表重叠 如何在两者之间创造更多空间 我尝试在布局中添加 height 但这会改变我的桑基图的宽度 line2 From time str tim
  • PHPMyAdmin 中没有结果

    使用 Mysql 控制台 set Name CONCAT seq 0 to DATEDIFF 2015 12 15 2015 12 05 1 Query OK 0 rows affected 0 00 sec MariaDB test gt
  • 使用 COM 对象的 Python ctypes 和 DLL

    在 Windows 下 我尝试使用第 3 方 DLL SomeLib dll 使用 Python 2 7 用 C 编程ctypes 对于其某些功能 该库使用另一个 COM DLL SomeCOMlib dll 它本身使用其他DLL LibA
  • 在 CONNECT-BY 查询中未获得完整的系列乘法(乘积)

    我有一个 CONNECT BY 查询 但没有得到所需的结果 最终的子查询和查询应该产生一串百分比相乘的乘积 它首先列出了每年的保留百分比 PCT 随着查询的进行 它应该将第一年的 PCT 乘以下一年的 PCT 依此类推 直到达到所需的深度