连接组件

2023-12-12

我有一组数据,是通过将相似的子项目匹配在一起创建的,然后按“类别”对这些相似的项目进行分组。

现在,结果类别必须以在每个“group_id”内将相关类别分组在一起的方式进行匹配。在下面的示例中,一个匹配是 A->B->C->D->E->F->G,这是通过行递归获得的。

我已经发布了我的当前答案,它适用于这个简单的数据集,但由于实际数据集最多包含 1M 行,并且每个“group_id”可能最多有 60 个类别,因此该查询会导致实际数据出现“超出假脱机空间”错误。

请注意:

  • 由于公司限制,我无法使用存储过程。
  • 我无法使用用户定义的函数 (UDF)
  • 我无法使用用户定义类型 (UDT)

正确答案将

  • 专为 Teradata 或兼容版本编写
  • 比我的回答更有效率
  • 遵守我上面提到的限制

输入示例:

Sample Input

期望的输出:

Desired Output


您需要一种递归方法,但是您的WITH RECURSIVE创建一个巨大的中间结果,这导致没有更多的线轴.

对于类似的过程,我使用了以下方法(最初在存储过程中使用 WHILE 循环):

CREATE MULTISET VOLATILE TABLE vt_tmp, NO Log  AS
 (
  SELECT group_id, category_1, category_2, 
     -- assign a unique number to 
     Dense_Rank() Over (ORDER BY group_id, category_1) AS rnk

  -- remove when you source data is unique
  GROUP BY 1,2,3 -- same result as a DISTINCT, but processed before DENSE_RANK
  FROM match_detail 
 )
WITH DATA
PRIMARY INDEX (category_2)
ON COMMIT PRESERVE ROWS;

现在重复以下更新,直到0 rows processed:

-- find matching categories and assign them a common number    
UPDATE vt_tmp FROM
 ( SELECT e2.group_id, e2.category_1, Min(e1.rnk) AS minrnk
   FROM vt_tmp e1 JOIN vt_tmp e2
   ON e1.category_2 = e2.category_2
   AND e1.rnk < e2.rnk
   GROUP BY e2.group_id, e2.category_1
 ) x
SET rnk = minrnk
WHERE 
  vt_tmp.group_id = x.group_id
AND vt_tmp.category_1 = x.category_1
;

要获取您最终需要的相关类别:

SELECT group_id, category_1 AS category, rnk AS related_categories
FROM vt_tmp
UNION
SELECT group_id, category_2, rnk 
FROM vt_tmp

为了与您的预期结果完全匹配,您需要添加DENSE_RANK:

SELECT group_id, category, Dense_Rank() Over (PARTITION BY group_id ORDER BY related_categories)
FROM
 (
   SELECT group_id, category_1 AS category, rnk AS related_categories
   FROM vt_tmp
   UNION
   SELECT group_id, category_2, rnk 
   FROM vt_tmp
 ) AS dt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接组件 的相关文章

  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • RANK() OVER PARTITION 并重置 RANK

    如何获得在分区更改时重新启动的 RANK 我有这张表 ID Date Value 1 2015 01 01 1 2 2015 01 02 1
  • 如何将事物的组合映射到关系数据库?

    我有一个表 其记录代表某些对象 为了简单起见 我假设该表只有一列 这是唯一的ObjectId 现在我需要一种方法来存储该表中的对象组合 组合必须是唯一的 但可以是任意长度 例如 如果我有ObjectIds 1 2 3 4 我想存储以下组合
  • SQL UPDATE 语句根据另一个现有行更新列

    基本上我有一个与下表具有相似格式的表格 我想做的是根据这个逻辑更新 Col4 如果 Col2 为空 则用 Col3 更新 Col4 如果 Col2 不为 null 则在 Col1 中查找与 Col2 中的值匹配的值 使用 col3 中的相应
  • 删除表的重复项

    In my activity logs 它包含列 material name user id mod result 这标志着测试是否通过 失败 cert links 不知何故 用户生成了两倍的条目material name与cert lin
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 将数据从 oracle 移动到 HDFS,处理并从 HDFS 移动到 Teradata

    我的要求是 将数据从 Oracle 移至 HDFS 处理HDFS上的数据 将处理后的数据移至 Teradata 还需要每 15 分钟执行一次整个处理 源数据量可能接近50GB 处理后的数据也可能相同 在网上搜索了很多之后 我发现 PRARO
  • NVARCHAR 变量在Where 子句中不起作用

    在 SQL Server 我想是 2018 我不知道如何判断 中 我的变量不起作用WHERE的条款NVARCHAR 比较应该返回值 但它什么也没返回 如果我只是手动输入声明的文本 它会突然起作用并返回值 没有任何逻辑原因应该有任何不同 类型
  • Snowflake 中的动态 SQL

    当我在雪花中运行动态 SQL 时 遇到以下错误 未完成对 SQL MAIN 的分配 因为值超出了变量的大小限制 它的大小是263 限制为 256 内部存储大小以字节为单位 这是代码 SET v G 1 SET v G1 v G VARCHA
  • 获取在任何日期创建的表的列表?

    我遇到了这样的情况 我想查找我在 2012 年 9 月 14 日 2012 年 9 月 14 日 在 sql server 上创建的表 是否有任何查询会列出在此日期创建的这些表 SELECT FROM sys tables WHERE cr
  • SQL Server:为什么 ISO-8601 格式的日期依赖于语言?

    我需要一些帮助来理解 SQL Server 中的日期格式处理 如果您尝试以下操作 它将返回正确的结果 SET LANGUAGE English SELECT CAST 2013 08 15 AS DATETIME 2013 08 15 00
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 如何拥有引用另一个表的检查约束?

    我在 SQL Server 2008 数据库中有以下表 tblItem 其中有一个ItemID field 好项目 它还有一个 ItemID 字段 并且有一个指向 tblItem 的外键 tblBadItem 它也有一个 ItemID 字段
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013

随机推荐

  • ECMAScript 6 负二进制文字

    通过 EMCAScript6 我发现有一种方法可以表示二进制文字使用0b or 0B字首 我正在尝试它 但找不到表示负数的方法 因为它没有使用补码 我错过了什么吗 我找不到实际规范中解释二进制文字的位置 我想我可以通过类似的操作自己实现它
  • 仅在应用程序发布到 Google Play 后,Firebase 数据库才会出现错误 - android

    我正在制作一个使用 firebase 数据库的应用程序 我的应用程序运行时没有崩溃 直到我将其作为测试版发布到 Google Play 上 当我发布该应用程序时 它不断崩溃并在一行上返回 com google firebase databa
  • 24 小时后过期的 SQL 条目

    我想制作一个表 其中的条目在插入 PHP 和 MySQL 后 24 小时后过期 理想情况下 我希望每次用户与我的服务器交互时运行 删除过程 以删除旧条目 由于这种情况更为频繁 因此您应该不会有大量数据需要删除 因此它应该只需要几毫秒 我为每
  • 如何使用实体框架从 SQL Server 实例获取数据库名称列表?

    我想使用实体框架 EF 查询 SQL Server 实例并返回该实例上的数据库名称列表 我可以使用以下代码来做到这一点 但想知道是否有 EF 的方法 public static string GetDatabaseNames SqlConn
  • linq toEntity 无法识别方法

    我有这些方法 public int count Guid companyId Expression
  • 空手道 API 测试中不存在 iRequired 请求部分“文件”

    当我尝试使用以下功能时 我收到必需的请求部分 文件 不存在 功能 验证 API 是否正确返回产品 Background url http localhost 8080 Scenario Products are returned on po
  • 使用元标记和 PHP 重定向页面

    在这里 在 PHP 代码中 我面临着在有效登录后重定向页面的问题 示例代码 result mysql query sql count mysql num rows result if count 1 echo else gt gt
  • 如何在没有 ResultSet 的情况下获得 ResultSetMetaData 的等效项

    我需要将一堆列名解析为列索引 以便使用一些不错的ResultSetMetaData方法 然而 我知道如何获得的唯一方法ResultSetMetaData对象是通过调用getMetaData 一些ResultSet 我遇到的问题是 获取 Re
  • Spring 批量暂停/恢复与停止/重新启动

    我是 Spring Batch 的新手 有一些关于暂停 恢复的问题 阅读 spring Batch 文档后 似乎没有任何内置的暂停或恢复功能 但是 我从主站点找到了这个用例 http docs spring io spring batch
  • 如何一条一条选择记录而不重复

    select id name from customer order by random limit 5 上述查询选择随机记录 但是它会重复行 我只想每次选择一行而不重复 假设我的 id 为 1 到 5 第一次我想选择 1 第二次查询显示
  • 使用 Azure Active Directory Oauth 进行 Azure 服务管理 API 身份验证

    我想通过curl 使用Azure AD 对Azure 服务管理API 进行身份验证 I 设置一个应用程序在我的默认目录中 在这个免费试用订阅中 这是我拥有的唯一目录 当我定位 oauth 令牌端点时 我收到一个 JWT curl data
  • 关于验证用户登录名和密码的问题

    朋友们 我需要制作一个软件 需要验证有效的用户登录才能使用软件 我试过这个 bool valid false using PrincipalContext context new PrincipalContext ContextType D
  • Docker compose在另一个目录会影响其他容器

    我有一个问题 我用我的docker compose一个项目的文件 然后我将其复制到另一个目录以运行另一个容器 但每当我这样做时 它都会重新创建现有容器 或者如果我使用 down 命令 它还会销毁另一个目录中的容器 可能会出现什么问题 这是我
  • 如何将工作日和时间对象解析为从今天开始的下一个逻辑日期?

    我的字符串中有一个日期 看起来像MON 07 15 我试图将其解析为Date使用这段代码 System out println new SimpleDateFormat E kk mm parse MON 07 15 使用上面的代码 打印一
  • requiredFieldValidator 在更新面板中工作异常

    我有一个带有文本框 必填字段验证器和几个按钮的更新面板 页面加载时 您会看到一个标签和一个按钮 按下按钮时 将显示文本框和验证器 以及其他按钮 显示的基本变化效果很好 但是 即使文本框已填充 我的验证器 设置为动态 也会显示其错误消息 假设
  • 强制 iOS 从 HTML5 Canvas 下载图像(使用纯 JavaScript)

    这个问题之前已经被问过 普遍的回答是在 iOS 上无法完成 However这些问题已经存在了好几年了 有可能已经制定了解决方法 或者现在有办法做到这一点 我有一个可用的纯 JavaScript 图像编辑器 它不会让最后的编辑步骤 保存编辑后
  • 动态高度浏览器

    我正在尝试在自定义滚动视图中创建一个自定义视图分页器 动态包裹当前孩子的高度 package com example vihaan dynamicviewpager import android content Context import
  • Python win32com 和二维数组

    当使用 python 和 win32com 来自动化 Adob e 软件时 会遇到传递 2d 坐标数组的问题 如果看一下 Adob e 为 Visual Basic VB 提供的代码 就会发现很简单 在 Illustrator 中绘制线条的
  • Gorm 关系错误:需要为关系定义有效的外键或者需要实现 Valuer/Scanner 接口

    我正在对使用 Gorm 时出现的问题进行故障排除 我的 sqlite3 数据库和 Go 数据模型一切都工作得很好 但是当我遇到一些依赖项问题时 无法在构建环境中 进入 所以我尝试从供应商文件夹中复制 删除一些包 然后重新 去 直到我让构建工
  • 连接组件

    我有一组数据 是通过将相似的子项目匹配在一起创建的 然后按 类别 对这些相似的项目进行分组 现在 结果类别必须以在每个 group id 内将相关类别分组在一起的方式进行匹配 在下面的示例中 一个匹配是 A gt B gt C gt D g