问题标签 [recursive-cte]
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-server - 递归 cte 以识别数据中的循环引用
我正在尝试识别我需要递归 cte 的数据中的递归/循环引用。
例如,我有一个包含Product_ID
and的表Inner_Product_ID
。当 Product_ID A 在 Product_ID B 内部时,我想要结果,它在 Product_ID C 内部,在 Product_ID A 内部。
样本数据
预期产出
我已尝试使用 cte 进行基本查询,但不确定如何针对此问题实现递归 cte:
sql - 锚点和递归之间的类型不匹配
我有递归日期的sql查询错误问题
递归查询“日期”的“日历日期”列中的锚点和递归部分之间的类型不匹配。
这个查询已经在存储过程中执行了但是我们有这个代码的问题将在 c# 代码中合并我得到上面提到的错误
sql - 在列中的两个值之间重复值
我正在尝试重复列中的第一个特定非空值,直到同一列中的下一个特定非空值。我怎么做?
数据如下所示:
它应该是这样的:
我调查了一下LAG()
,LEAD()
但我一直认为我必须使用 a CURSOR
。我只知道这些,但还没有在这种情况下使用它们。
postgresql - 反向 SELECT 查询结果
我有递归查询,它从分层模型返回一些行。有点儿:
如何反转 SELECT 查询的结果?
PS:我不能按 ID 订购,父母的 id 可以或多或少然后在孩子。
sql-server-2012 - 如何诊断缓慢/不一致的 SQL Server 查询?
运行 Windows Server 2012、Hyper-V、SQL Server 2012 主动/被动故障转移集群,带两个 8 处理器、60GB 节点、单实例、300 个数据库。此查询产生不一致的结果,运行时间在 10 到 30 秒之间。
替换LEFT JOIN Addresses
为JOIN Addresses
或将所选列的长度减少Addresses
到小于 100 字节
将执行时间减少到大约 0.5 秒。
此外,使用SELECT DISTINCT
和加入books.Entities
到Vendors
将时间减少到大约 0.75 秒。
概括
这些情况表明 SQL Server 实例中存在某种资源限制,导致这些不稳定的结果,我不知道如何诊断它。如果我将有问题的数据库复制到运行 SQL Server 2012 的笔记本电脑上,则不会出现问题。我可以继续更改 SQL 并希望获得最好的结果,但我更愿意找到更明确的解决方案。
任何建议表示赞赏。
2018 年 2 月 27 日更新
将选择的列的长度减少Addresses
到小于 100 字节
将 Clustered Index Seek 替换为 Clustered Index Scan 以检索a.Fax
和 Hash Match 以将此值加入结果。
表Addresses
主键创建如下:
该索引每天都会根据需要进行碎片整理和优化。
到目前为止,我找不到任何有用的信息来解释为什么 Clustered Index Seek 会为查询增加这么多时间。
row-number - 使用前几行 row_number 值计算位置变化
我正在尝试根据前几行ROW_NUMBER()
与当前行相比计算位置变化ROW_NUMBER()
我的查询使用带有 ROW_NUMBER() OVER .. 子句的递归 cte,该子句巧妙地为我提供了按年份划分的结果行号。
在此之后,我的查询然后比较位置以计算行号之间的变化。
不幸的是,这不起作用,因为 [after] 位置始终为空。
这有点难以解释,所以我提供了一个 sqlfiddle 链接:http ://www.sqlfiddle.com/#!18/c7e57e/1
--
2011 年明尼苏达排名第 1,2012 年明尼苏达排名第 3,变化为 +2
2011 年爱荷华州排名第 6,2012 年爱荷华州排名第 4,变化为 -2
2011 年南达科他州排名第 5,2012 年南达科他州排名第 5,变化为 0
谢谢
sql-server - 如何使用递归 CTE 从 00 到 23 获取时间?
如何使用递归 CTE 从 00 小时到 23 小时获得一天的小时数?
它给出了 00 到 24 小时,但我需要在我的结果集中排除 24 小时,或者换句话说,我最多只需要 00 到 23 小时
我的代码:
它给出了 00 到 24 小时,但我需要在我的结果集中排除 24 小时,或者换句话说,我最多只需要 00 到 23 小时
实际结果:
预期结果:
sql - 有没有比 LIKE 更快的方法来 RECURSIVELY 加入 SQL-Server,没有循环?
我需要递归地加入一个可以有循环的大图。
现在,在 SQL-Server 中的简化版本如下所示:
由于 SQL-Server 不支持数组,我尝试使用 JSON 进行优化:
但 JSON 并没有更快,而且它只适用于 SQL-Server 2016+。
我也尝试过使用 XML:
虽然这适用于 sql-server < 2016,但这太慢了 - 比喜欢的要糟糕得多。
获得良好性能的唯一方法是切换到支持数组的 PostgreSQL:
这在 1.6 秒内完成,这与我预期的一样好。
有什么方法可以提高 SQL-Server 的性能吗?
注意:
这个愚蠢的例子CTE.i IN (whatever)
不应该有任何意义,它只是为了速度比较。
tsql - 如何创建参数化递归 CTE 以展平标量函数中的层次结构?
我正在尝试创建一个标量函数来确定提供 ID 的用户或其任何下属是否在提供的订单 ID 集合下有订单。
注意我正在使用我自己的用户定义表类型IntegerIdTableType
来获取 OrderIds 的集合。
这是我的Orders和Users表的一些示例数据。
用户
订单
预期成绩
DoOrdersExistUnderUserOrUsersSubordinates
使用以下值调用时,我期望得到以下结果。
我在使用此功能时遇到了 2 个问题:
语法错误:
关键字“WITH”附近的语法不正确。
')' 附近的语法不正确。
“GetUserIds”不是可识别的内置函数名称
即使没有包装在函数中,上述情况似乎也会发生。
我不知道将参数传递给递归 CTE 的正确方法是什么,但我已经看到 CTE 的声明在括号中有一个名称的示例,我认为它是一个参数
我尝试在分号之前立即放置一个分号,WITH
即使它是函数中唯一的语句,我只是在';'附近得到不正确的语法。而不是关键字“WITH”附近的语法不正确。
我也试过去掉BEGIN
and END
,这给了我在'RETURN'附近的不正确语法。, 加上关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces
子句或更改跟踪上下文子句,则前面的语句必须以分号结束。如果我不包括多余的分号。
我该如何解决这一切?
当然,递归 CTE 必须能够接受一个参数,或者他们会递归什么?
更新:
在与Zohar_Peled 链接的文档的示例 F进行斗争之后,我最终发现参数并没有像这样传递到 CTE 中,而是加入到 CTE 中,然后通过其声明的括号保留在其中。然后在相应SELECT
的 s 中定义的任何内容都通过参数输出到称为 CTE 的任何内容(在这种情况下,外部SELECT Id FROM UserNodes
语句或 CTE 本身(用于递归))。
我将函数内的 SQL 语句更改为以下内容,它在函数外按预期工作。
这单独工作很好(提供了所需的变量来替换缺少的函数参数),但是一旦我将它放回CREATE FUNCTION
块中,我就会面临与以前相同的语法错误(不包括 2.)。
sql-server - 如何使用递归 CTE 为数据集添加分辨率
我正在尝试创建一个递归 CTE 语句,该语句在数据点之间添加空白行,稍后将用于插值。我是 SQL 的初学者,这是我第一次使用 CTE,我很难找到正确的方法来做到这一点。
经过一些研究后,我尝试对下面提供的代码进行一些不同的细微修改,但还没有很好地理解我的问题。以下代码应通过每 4 小时从样本数据集中进行一次观察来模拟稀疏采样,第二部分应每 0.1 小时添加具有相应 x 值的行,稍后将填充从三次样条曲线派生的插值。
- 样本数据
--1
--2
第一个 CTE 按预期工作并产生 12 个列表(两天每 4 小时一个样本),但第二个产生语法错误。预期的输出将类似于