问题标签 [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.
sql - 在分层查询中查找“最深”的孩子
我需要一些帮助来查询分层数据。这是一个简单的表,其中对根条目的parent_id
引用id
和可能为空。
对于表中的每条记录,我需要找到具有最大 id 的最深的孩子。如果记录没有孩子,则应返回其自己的 id。我自己尝试过,但使用START WITH A.id = B.id
where A 和 B 是子查询失败了,看起来 Oracle 不允许这样的连接。
这是示例数据:
和样本结果
sql - 在列之间切换数据
采取以下示例代码:
返回:
我希望我可以建立一个新列,其中包含每条记录的先前值,例如:
尽管我经常迷失在 connect_by 语句中,但这似乎很简单。
有人可以帮忙吗?
oracle - 通过先前的预言机连接
我有一个包含分层元素的表
桌子 :
B 是来自同一张表的外键
查询是:
结果
为什么会出现“2 C2”?
尽管它不正确,但所需的结果是,我:
oracle - 多个可能的列匹配上的 Oracle 自联接 - CONNECT BY?
我有一个来自----的查询要求。试图用 解决它CONNECT BY
,但似乎无法得到我需要的结果。
表(简化):
有两种用户数据来源(数据馈送)...在更新信息时,我必须注意其中任何一个中的错误。
场景:
- 一个用户被赋予了一个新的用户 ID... 旧记录被相应地设置并被停用(通常为成为全职的承包商重命名)
- 用户离开并稍后返回。HR 未能将旧用户 ID 发送给我们,以便我们可以连接帐户。
- 系统搞砸了,没有在旧记录上设置新的用户 ID。
- 数据可能以其他一百种方式变坏
我需要知道以下是同一个用户,我不能依赖名称或其他字段......它们在匹配记录中有所不同:
EXOT1100
并EX000005
通过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 分钟 >.<
再次感谢您的帮助...为此而步履蹒跚。
oracle - 如何在 oracle 中使用提交时刷新将分层查询创建为实体化视图
谁能告诉我是否有可能在 oracle 10g 中创建分层查询作为带有 REFRESH ON COMMIT 的物化视图?
我尝试使用 CONNECT_BY 但这不适用于 REFRESH ON COMMIT。
当底层数据发生变化时,是否有其他可能让视图自动刷新?
或者可能有替代 CONNECT_BY 与 REFRESH ON COMMIT 一起使用的替代方法?
在此先感谢您的任何提示或帮助。
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
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 行
对我来说,文档在解释应该发生的事情时并不是特别清楚。这些权力发生了什么?为什么前两个查询与第三个查询不同?
sql - 分层查询需要拉取子、父、兄弟
现在可以拉数据,但想知道是否有更好的方法来优化大型数据集的查询。
http://sqlfiddle.com/#!4/0ef0c/5
所以基本上我希望能够为查询提供给定的 org id 并让它递归地拉出它的父母、孩子、兄弟姐妹和叔叔阿姨。然后拉取与该组织层次结构关联的任何活动。
Org1 是顶级组织,但它可能有也可能没有 null 父级。
基本上我正在做一个上下查询来拉孩子和父母,但似乎只能通过添加另一个查询来获得兄弟姐妹。终于在朋友的帮助下进行了另一个查询,但它在大型数据集(4-5k 的活动)上非常低。
任何见解将不胜感激。
sql - 计算其父母拥有的根的百分比
简而言之,我试图计算其父母拥有的树根的百分比,进一步向上。如何仅在 SQL 中执行此操作?
这是我的(示例)架构。请注意,虽然层次结构本身非常简单,但还有一个额外的holding_id
,这意味着单亲可以“拥有”其孩子的不同部分。
以及一些示例数据:
以下查询返回我想要进行的计算。由于 SYS_CONNECT_BY_PATH 的性质,据我所知,它不能自行执行计算。
数据中存在周期性关系,只是在这个例子中没有。
目前我将使用一个非常简单的函数将calc
列中的字符串转换为数字
这似乎是一种荒谬的方式,我宁愿避免解析动态 SQL 1所花费的额外时间。
从理论上讲,我认为,我应该能够使用 MODEL 子句来计算这一点。我的问题是由树的非唯一性引起的。我使用 MODEL 子句执行此操作的尝试之一是:
可以理解的是,这失败了,原因如下:
ORA-32638: 模型维度中的非唯一寻址
由于类似的原因,使用UNIQUE SINGLE REFERENCE失败,即 ORDER BY 子句不是唯一的。
tl;博士
有没有一种简单的方法可以仅使用 SQL 来计算其父母所拥有的树根的百分比?如果我在 MODEL 的正确轨道上,我哪里错了?
1. 我还想避免 PL/SQL SQL 上下文切换。我意识到这是很短的时间,但如果不每天增加几分钟,这将很难快速完成。
sql - 使用 SQL 生成数字范围之间的后续数字
我有一个包含以下内容的表格:
在使用 Oracle 11g 的单个查询中,我想检索以下结果,其中我列出了存在于定义的范围内的每个唯一数字
我一直在玩 connect by & 模型子句,但到目前为止还没有成功。
TX 为您提供帮助