问题标签 [connect-by]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3210 浏览

sql - 在分层查询中查找“最深”的孩子

我需要一些帮助来查询分层数据。这是一个简单的表,其中对根条目的parent_id引用id和可能为空。

对于表中的每条记录,我需要找到具有最大 id 的最深的孩子。如果记录没有孩子,则应返回其自己的 id。我自己尝试过,但使用START WITH A.id = B.idwhere A 和 B 是子查询失败了,看起来 Oracle 不允许这样的连接。

这是示例数据:

和样本结果

0 投票
1 回答
46 浏览

sql - 在列之间切换数据

采取以下示例代码:

返回:

我希望我可以建立一个新列,其中包含每条记录的先前值,例如:

尽管我经常迷失在 connect_by 语句中,但这似乎很简单。

有人可以帮忙吗?

0 投票
2 回答
8458 浏览

oracle - 通过先前的预言机连接

我有一个包含分层元素的表

桌子 :

B 是来自同一张表的外键

查询是:

结果

为什么会出现“2 C2”?

尽管它不正确,但所需的结果是,我:

0 投票
1 回答
3640 浏览

oracle - 多个可能的列匹配上的 Oracle 自联接 - CONNECT BY?

我有一个来自----的查询要求。试图用 解决它CONNECT BY,但似乎无法得到我需要的结果。


表(简化):

有两种用户数据来源(数据馈送)...在更新信息时,我必须注意其中任何一个中的错误。


场景:

  1. 一个用户被赋予了一个新的用户 ID... 旧记录被相应地设置并被停用(通常为成为全职的承包商重命名)
  2. 用户离开并稍后返回。HR 未能将旧用户 ID 发送给我们,以便我们可以连接帐户。
  3. 系统搞砸了,没有在旧记录上设置新的用户 ID。
  4. 数据可能以其他一百种方式变坏


我需要知道以下是同一个用户,我不能依赖名称或其他字段......它们在匹配记录中有所不同:


EXOT1100EX000005通过NEW_USER_ID现场正确连接。重命名发生在全球 HR ID 之前,因此EX0T1100没有。 EX000005被赋予了一个新的用户 ID,“GL110456”,并且两者仅通过具有相同的全局 HR ID 来连接。

清理数据不是一种选择。


到目前为止的查询:


我尝试了各种CONNECT BY条款,但没有一个是完全正确的:


UNIONing 两个 CONNECT BY 查询不起作用......我没有得到调平。

这是我想看到的...我可以接受我必须区分并用作子查询的结果集。我也可以接受 ROOTUSER 列中的三个用户 ID 中的任何一个......我只需要知道他们是相同的用户。


想法?


更新

Nicholas,您的代码看起来非常像正确的轨道......目前,当为空时,lead(user_id) over (partition by global_hr_id)得到错误命中。global_hr_id例如:

我经常想将空值视为分区中的单独记录,但我从来没有找到一种方法来ignore nulls工作。这做了我想要的:

...但必须有更好的方法。我还没有能够完成对完整用户数据(大约 40,000 个用户)的查询。global_hr_id和都new_user_id被索引。


更新

查询在大约 750 秒后返回……很长,但易于管理。它返回 93k 记录,因为我没有从根目录中过滤级别 2 命中的好方法 - 你有start with global_hr_id is null,但不幸的是,情况并非总是如此。我将不得不考虑更多关于如何过滤掉这些内容。

我之前尝试过添加更复杂的 start with 子句,但我发现它们单独运行 < 1 秒......一起,它们需要 90 分钟 >.<

再次感谢您的帮助...为此而步履蹒跚。

0 投票
1 回答
830 浏览

oracle - 如何在 oracle 中使用提交时刷新将分层查询创建为实体化视图

谁能告诉我是否有可能在 oracle 10g 中创建分层查询作为带有 REFRESH ON COMMIT 的物化视图?

我尝试使用 CONNECT_BY 但这不适用于 REFRESH ON COMMIT。

当底层数据发生变化时,是否有其他可能让视图自动刷新?

或者可能有替代 CONNECT_BY 与 REFRESH ON COMMIT 一起使用的替代方法?

在此先感谢您的任何提示或帮助。

0 投票
2 回答
358 浏览

sql - 识别分配oracle sql 10g的开始和结束

这与我在这里已经问过(并已回答)的问题非常相似:识别所涵盖期间的开始和结束 - oracle 10g sql

但是,在这种情况下,我无法弄清楚如何实现我所需要的。我的数据如下所示:

结束代码“A”表示已重新分配案例,“J”表示已关闭。我想要如下所示的数据:

正如我已经说过的,这与我之前提出的问题非常相似,但在那种情况下,我可以使用一个起始代码。我想我需要确定分配的开始 - 它要么是带有“J”代码的分配之后的第一个日期,要么只是最早的日期,但我有点挣扎。任何建议表示赞赏!作为参考,我的oracle版本是10g,10.2.0.5.0。

编辑:接受@Dazzal 提供的答案,因为它回答了我的原始查询,但我根据@Gordon Linoff 的回答发布了一个新问题,因为我认为这更符合我的需求。 https://stackoverflow.com/questions/13383560/grouping-data-oracle-sql-based-on-sum

0 投票
4 回答
80695 浏览

sql - 为什么表上的 CONNECT BY LEVEL 会返回额外的行?

在表上执行时,使用 CONNECT BY LEVEL 似乎返回太多行。发生的事情背后的逻辑是什么?

假设下表:

此查询返回 12 行 ( SQL Fiddle )。

表 A 中的每一行,LVL 列的值为 1,表 A 中 LVL 列为 2 的每一行,即:

它相当于这个查询,它返回相同的结果。

我不明白为什么这些查询返回 12 行,或者为什么对于 ID 列的每个值,LVL 为 2 的行有 3 行,而 LVL 为 1 的行只有 1 行。

将“连接”的级别数增加到 3 会为每个 ID 值返回 13 行。1,其中 LVL 为 1,3,其中 LVL 为 2,9,其中 LVL 为 3。这似乎表明返回的行数是表 A 中的行数的 LVL 值减去 1 的幂。

尽管这些查询与以下查询相同,但我会返回 6 行

对我来说,文档在解释应该发生的事情时并不是特别清楚。这些权力发生了什么?为什么前两个查询与第三个查询不同?

0 投票
2 回答
1169 浏览

sql - 分层查询需要拉取子、父、兄弟

现在可以拉数据,但想知道是否有更好的方法来优化大型数据集的查询。

http://sqlfiddle.com/#!4/0ef0c/5

所以基本上我希望能够为查询提供给定的 org id 并让它递归地拉出它的父母、孩子、兄弟姐妹和叔叔阿姨。然后拉取与该组织层次结构关联的任何活动。

Org1 是顶级组织,但它可能有也可能没有 null 父级。

基本上我正在做一个上下查询来拉孩子和父母,但似乎只能通过添加另一个查询来获得兄弟姐妹。终于在朋友的帮助下进行了另一个查询,但它在大型数据集(4-5k 的活动)上非常低。

任何见解将不胜感激。

0 投票
2 回答
1039 浏览

sql - 计算其父母拥有的根的百分比

简而言之,我试图计算其父母拥有的树根的百分比,进一步向上。如何仅在 SQL 中执行此操作?

这是我的(示例)架构。请注意,虽然层次结构本身非常简单,但还有一个额外的holding_id,这意味着单亲可以“拥有”其孩子的不同部分。

以及一些示例数据:

SQL小提琴

以下查询返回我想要进行的计算。由于 SYS_CONNECT_BY_PATH 的性质,据我所知,它不能自行执行计算。

数据中存在周期性关系,只是在这个例子中没有。

目前我将使用一个非常简单的函数将calc列中的字符串转换为数字

这似乎是一种荒谬的方式,我宁愿避免解析动态 SQL 1所花费的额外时间。

从理论上讲,我认为,我应该能够使用 MODEL 子句来计算这一点。我的问题是由树的非唯一性引起的。我使用 MODEL 子句执行此操作的尝试之一是:

可以理解的是,这失败了,原因如下:

ORA-32638: 模型维度中的非唯一寻址

由于类似的原因,使用UNIQUE SINGLE REFERENCE失败,即 ORDER BY 子句不是唯一的。

tl;博士

有没有一种简单的方法可以仅使用 SQL 来计算其父母所拥有的树根的百分比?如果我在 MODEL 的正确轨道上,我哪里错了?

1. 我还想避免 PL/SQL SQL 上下文切换。我意识到这是很短的时间,但如果不每天增加几分钟,这将很难快速完成。

0 投票
1 回答
1365 浏览

sql - 使用 SQL 生成数字范围之间的后续数字

我有一个包含以下内容的表格:

在使用 Oracle 11g 的单个查询中,我想检索以下结果,其中我列出了存在于定义的范围内的每个唯一数字

 

我一直在玩 connect by & 模型子句,但到目前为止还没有成功。

TX 为您提供帮助