使用 SYS_CONNECT_BY_PATH 的 Oracle 累积计数

2024-05-13

当我尝试对实际数据执行以下查询时,它返回了更多记录数。请帮助解决这个问题。

下面是表 DM_TEMP_SUMMING_DVC_BY_FW 中的实际数据

+-----------+-------+-----------------+------------+------------------+
device_count| dmc_id| firmware_version| cg_id      |image_prerequisite|
+-----------+-------+-----------------+------------+------------------+
| 40        | 408   |RT2              |0000        |RT1               |
| 24        | 408   |RT3              |0000        |RT2               |
| 18        | 408   |RT4              |0000        |RT3               |
| 2109      | 408   |RT1              |0000        |null              |
| 1         | 142   |RT1              |0000        |null              |
| 1         | 142   |RT2              |0000        |RT1               |
| 1         | 408   |RT1              |HFOTA1      |null              |
| 1         | 408   |RT1              |HFOTA2      |null              |
| 1         | 408   |RT1              |HFOTA3      |null              |
| 1         | 408   |RT1              |HFOTA4      |null              |
| 1         | 408   |RT1              |HFOTA5      |null              |
+-----------+-------+-----------------+------------+------------------+

我已执行的查询:

SELECT SYS_CONNECT_BY_PATH(firmware_version, '/') path_,
  firmware_version,
  device_count,
  dmc_id,
  charging_group_id ,
  IMAGE_PREREQUISITE,
  (SELECT SUM(device_count)
  FROM DM_TEMP_SUMMING_DVC_BY_FW t2
    START WITH t1.firmware_version           =t2.firmware_version
    CONNECT BY nocycle PRIOR firmware_version=image_prerequisite
  ) sum_device
FROM DM_TEMP_SUMMING_DVC_BY_FW t1
  START WITH image_prerequisite            IS NULL
  CONNECT BY nocycle PRIOR firmware_version =image_prerequisite

预期结果:

+--------------------+-------+-----------------+-------+--------------------+
cumm_device_count    | dmc_id| firmware_version| cg_id |chain               | 
+--------------------+-------+-----------------+-------+--------------------+
| 82                 | 408   |RT2              |0000   |null/RT1/RT2        |
| 42                 | 408   |RT3              |0000   |null/RT1/RT2/RT3    |
| 18                 | 408   |RT4              |0000   |null/RT1/RT2/RT3/RT4|
| 2191               | 408   |RT1              |0000   |null/RT1            |
| 2                  | 142   |RT1              |0000   |null/RT1            |
| 1                  | 142   |RT2              |0000   |null/RT1/RT2        |
| 1                  | 408   |RT1              |HFOTA1 |null/RT1            |
| 1                  | 408   |RT1              |HFOTA2 |null/RT1            |
| 1                  | 408   |RT1              |HFOTA3 |null/RT1            |
| 1                  | 408   |RT1              |HFOTA4 |null/RT1            |
| 1                  | 408   |RT1              |HFOTA5 |null/RT1            |
+--------------------+-------+-----------------+-------+--------------------+

查询实际返回的结果:

我尝试使用查询根据firmware_version 和image_precession 生成链,但它没有按预期返回结果。此查询返回更多记录。

/RT1    RT1 2109    408 0000000000000000        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1    RT1 1   408 HFOTA-0000001885        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1    RT1 1   408 HFOTA-0000000041        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1    RT1 1   408 HFOTA-0000000441        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1    RT1 1   408 HFOTA-0000000359        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1    RT1 1   408 HFOTA-0000000334        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1    RT1 1   1422    0000000000000000        2990
/RT1/RT2    RT2 40  408 0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18
/RT1/RT2    RT2 1   1422    0000000000000000    RT1 125
/RT1/RT2/RT3    RT3 24  408 0000000000000000    RT2 42
/RT1/RT2/RT3/RT4    RT4 18  408 0000000000000000    RT3 18

sqlfiddle 中存储的数据的预期结果:http://sqlfiddle.com/#!4/3cd9b/1 http://sqlfiddle.com/#!4/3cd9b/1

|/RT1/RT2/RT3/RT4|  RT4       | 18 |    408|    0000000000000000|   24028|  18|
|/RT1/RT2/RT3    |  RT3       | 24 |    408|    0000000000000000|   24028|  42|
|/AP1/AP2/AP3    |  AP3       | 1  |    408|    0000000000000000|   24028|  1 |
|/RT1/RT2        |  RT2       | 40 |    408|    0000000000000000|   24028|  82|
|/AP1/AP2        |  AP2       | 2  |    408|    0000000000000000|   2    |  3 |
|/AP1            |  AP1       | 1  |    408|    0000000000000000|   1    |  4 |
|/RT1            |  RT1       |2109|    408|    0000000000000000|   24028|2191|
|/AS1            |  AS1       | 1  |    408|    0000000000000000|   24028|  1 |
|/LRA1.NOV9.01   |LRA1.NOV9.01| 2  |    408|    0000000000000002|   106  |  2 |
|/LRA001         |  LRA001    | 9  |    408|    0000000000000002|   106  |  9 |
|/LR1R_01        |  LR1R_01   |15  |    408|    0000000000000002|   106  |  15|
|/APK29.2013     |APK29.2013  | 4  |    408|    0000000000000002|   106  |  4 |
|/APK2013.29     |APK2013.29  | 2  |    408|    0000000000000002|   106  |  2 |
|/ADR_TLRA1      |ADR_TLRA1   | 2  |    408|    0000000000000002|   106  |  2 |
|/ADR37          |ADR37       | 1  |    408|    0000000000000002|   106  |  1 |
|/A0             |A0          | 5  |    408|    0000000000000002|   106  |  5 |
|/36             |36          | 2  |    408|    0000000000000002|   106  |  2 |
|/LRA1_K01       |LRA1_K01    | 2  |    408|    0000000000000002|   106  |  2 |
|/abc            |abc         | 5  |    408|    0000000000000002|   106  |  5 |
|/VZW_U01        |VZW_U01     | 1  |    408|    0000000000000002|   106  |  1 |
|/VZW.NOV9.01    |VZW.NOV9.01 | 1  |    408|    0000000000000002|   106  |  1 |
|/TOSS_01        |TOSS_01     | 1  |    408|    0000000000000002|   106  |  1 |
|/TK_ST001       |TK_ST001    | 1  |    408|    0000000000000002|   106  |  1 |
|/SVP01          |SVP01       | 1  |    408|    0000000000000002|   106  |  1 |
|/LRA1v1         |LRA1v1      | 1  |    408|    0000000000000002|   106  |  1 |
|/LRA2_R01       |LRA2_R01    | 2  |    408|    0000000000000002|   106  |  2 |
|/MMY02-2013     |MMY02-2013  | 3  |    408|    0000000000000002|   106  |  3 |
|/PP0_MR1        |PP0_MR1     | 1  |    408|    0000000000000002|   106  |  1 |
|/RT1            |RT1         | 1  |    408|    HFOTA-0000000041|   1    |  1 |
|/RT1            |RT1         | 1  |    408|    HFOTA-0000000334|   2    |  1 |
|/RT1            |RT1         | 1  |    408|    HFOTA-0000000359|   1    |  1 |
|/RT1            |RT1         | 1  |    408|    HFOTA-0000000441|   1    |  1 |
|/RT1            |RT1         | 1  |    408|    HFOTA-0000001885|   2    |  1 |
|/RT1/RT2        |RT2         | 1  |   1422|    0000000000000000|   7    |  1 |
|/RT1            |RT1         | 1  |   1422|    0000000000000000|   7    |  2 |

仅通过对 SQL Fiddle 示例数据进行试验和错误,这是返回预期数据的查询:

SELECT SYS_CONNECT_BY_PATH(firmware_version, '/') path_,
  firmware_version,
  device_count,
  dmc_id,
  charging_group_id,
  IMAGE_PREREQUISITE,
  (SELECT SUM(device_count)
  FROM DM_TEMP_SUMMING_DVC_BY_FW t2
  START WITH t1.firmware_version = t2.firmware_version
        and T1.dmc_id = T2.dmc_id
        and T1.charging_group_id = T2.charging_group_id
  CONNECT BY nocycle PRIOR firmware_version=image_prerequisite and prior dmc_id = dmc_id and prior charging_group_id = charging_group_id
  ) sum_device
FROM DM_TEMP_SUMMING_DVC_BY_FW t1
START WITH image_prerequisite IS NULL
CONNECT BY nocycle PRIOR firmware_version = image_prerequisite
    and prior dmc_id = dmc_id
    and prior charging_group_id = charging_group_id

Note:是的charging_group_id and dmc_id对于您的预期结果非常重要,正如 krokodilko 在上面的评论中正确提到的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SYS_CONNECT_BY_PATH 的 Oracle 累积计数 的相关文章

随机推荐

  • 使用本地 JSON 数据填充 jQuery Mobile ListView

    我正在尝试使用本地 JSON 信息填充 JQM ListView 但是 不会创建任何列表项 任何帮助 将不胜感激 这是我的代码 JSON 文件结构 name test calories 1000 fat 100 protein 100 ca
  • 是否可以“缩小”PdfPtable?

    我目前正在使用 Itextsharp 但在使用 PDfPtables 时遇到一些问题 有时 它们对于一个页面来说太大了 并且当添加到文档中时 它们会被分成多个页面 可悲的是 这种理性的行为对于我的一些上级来说是不可接受的 他们一直坚持认为表
  • 使用 Python 或 Django 处理收到的电子邮件?

    我了解如何通过 Django 发送电子邮件 但我希望用户能够回复电子邮件 如果他们发送 以及我收到 的电子邮件包含与某个字符串匹配的消息 我将调用一个函数 我已经做了一些谷歌搜索 但除了自己制作脚本之外似乎没有什么好的解决方案 如果有什么东
  • 创建通用数组时出错

    public class TwoBridge implements Piece private HashSet
  • 将 vim 的 vertsplit 字符更改为 │

    我认为这与代码页相关 但询问也无妨 在 windows xp 的 cmd 上 gvim 7 2 如何更改 vertsplit 字符 而不是默认的 它是 因此它是一条完整的线 而不是一条分割线 该字符通常会更改为 set fillchars
  • WCF 是否始终需要我的主机具有管理员权限?

    我正在跟进this http msdn microsoft com en us library ms730935 aspx教程 似乎要在我的应用程序中实现 WCF 它需要以管理员权限运行 我想使用远程处理only同一台机器上的进程之间进行通
  • 如何将值从 android 传递到 php Web 服务并检索它?

    我正在尝试将一个值传递给我的 php web 服务 我已经使用此代码来传递 名称 值 private class MyAsyncTask extends AsyncTask
  • 具有用于角色授权的空间的 AD 组

    我正在尝试获得与 AD 组合作的角色授权 然而 由于它包含空格 它似乎不起作用 我尝试过没有空格的 AD 组 它们工作得很好
  • libicui18n.so.52:无法打开共享对象文件

    我一直在使用 libicu 来检测在 docker ubuntu 内部运行的节点应用程序中的字符集 这是通过模块完成的节点 icu 字符集检测器 https github com mooz node icu charset detector
  • SQL where 连接集必须包含所有值,但可以包含更多值

    我有三张桌子offers sports和连接表offers sports class Offer lt ActiveRecord Base has and belongs to many sports end class Sport lt
  • 在 WSDL 中包含 XSD

    我正在编写一个 wsdl 文件来在未来 SoapUI 中部署模拟服务 但我在包含我的 xsd 文件时遇到问题 XSD File
  • 将位图旋转 90 度

    我有一个1 个 64 位整数 我需要在 8 x 8 区域中旋转 90 度 最好使用直接位操作 我想不出任何方便的算法 例如 这个 0xD000000000000000 110100000000000000000000000000000000
  • 抑制 Rspec 3 的回溯

    我正在使用 rspec 3 2 0 和 capybara 2 4 4 并在我的 spec helper rb 文件中如下所示 config full backtrace false 对于大多数错误 我都会得到回溯 例如 Failure Er
  • 查找所有子字符串的出现和位置

    我正在编写一个程序来解析一些保存为文本文件的数据 我想做的是找到大海捞针中每根针的位置 我已经可以读取文件并确定出现的次数 但我也希望找到索引 string str sub str is string to search sub is th
  • SQL 查询在多用户环境中返回错误值

    一段时间以来 我们在我们的一个客户站点上发现了奇怪的数据完整性问题 经过大量调查后 我们现在已将其隔离为数据库调用 如果两个用户同时调用同一个存储过程 有时一个用户会得到另一个用户的结果 我们设置了一个测试来验证这一点 并且我们有一个循环
  • 将声音图形化地表示为波

    我创建了一个记录和播放声音的应用程序 我正在寻找一种显示简单波形的方法 记录声音的表示 不需要动画 只需一个简单的图表 如果可以选择波的子集也很好 当然更好 也播放该部分 总而言之 我正在寻找什么 一种以图形方式将录制的声音表示为波的方法
  • 无法更改 MS Access 2007 上的数据类型

    我有一个巨大的数据库 800MB 其中包含一个名为 上次修改日期 的字段 目前该字段作为文本数据类型输入 但需要将其更改为日期 时间字段以执行一些查询 我有另一个完全相同的数据库 但其中只有 35MB 的数据 当我更改数据类型时 它工作正常
  • Google App Engine 数据存储写入:如何远程启用/禁用只读模式?

    在阅读备份时GAE 的数据存储 https developers google com appengine docs adminconsole datastoreadmin where 我们强烈建议您在备份或恢复期间将应用程序设置为只读模式
  • MySQL 过去 12 个月的月度销售情况,包括没有销售的月份

    SELECT DATE FORMAT date b AS month SUM total price as total FROM cart WHERE date lt NOW and date gt Date add Now interva
  • 使用 SYS_CONNECT_BY_PATH 的 Oracle 累积计数

    当我尝试对实际数据执行以下查询时 它返回了更多记录数 请帮助解决这个问题 下面是表 DM TEMP SUMMING DVC BY FW 中的实际数据 device count dmc id firmware version cg id im