问题标签 [non-equi-join]

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 回答
50 浏览

r - 在对某些值进行操作时通过重叠时段加入

我正在尝试加入一个像这样的时期数据库:

具有如下临床登记(体重和身高)的一个:

  • 当 id 的临床测量 (DT_clin) 注册表位于同一 id 的句点 (DT) 的开始和结束之间时,必须连接注册表的值。
  • 如果 DT 周期之间的 DT_clin 没有值,则无需加入任何内容。
  • 如果 DT 周期之间有多个值,我想计算重叠值的平均值。

期望的结果看起来像这样*:

此外,如果有一种方法可以对不同的变量进行多个操作,我也会有兴趣知道一种方法。(例如,在我加入的同时计算体重的平均值和身高的最大值)

当只有一个值时,我已经测试了 foverlaps,结果很好,但是当有多个值重叠时,我无法实现我的目标:

我应该使用非等值连接吗?

预先感谢您的任何帮助 :)

*我复制了日期来创建 date2 并伪造了一个时间间隔

0 投票
0 回答
279 浏览

r - 非 equi selfjoin data.table 错误“vecseq(f__, len__, if (allow.cartesian || notjoin || !anyDuplicated(f__,"

我正在尝试在具有 200 万行和 8 个变量的表上使用 data.table 进行非 equi 自连接。数据如下所示:

这是我使用的代码:

我应该得到:

但我不断收到此错误

我确实将 设置allow.cartesian为 TRUE 并添加了by=.EACHI,它仍然不起作用。我在包含 160 万行的表的一个子集上尝试了相同的代码,它就像一个魅力。你知道如何解决它吗?任何帮助将非常感激

0 投票
0 回答
73 浏览

r - 非 equi 连接不保留原始列值

我在运行非 equi 连接(来自 R 的 data.table 库)时发现了一个奇怪的行为,我不知道为什么会发生这种情况。

为什么在运行非等连接时,如果我想保留左表的原始值,我需要写x.colname而不是只colnamej连接的属性内?

这是我正在谈论的一个可重复的小示例:

这是joined_data_v1x.dfoj参数中使用)的快照: 加入数据v1

这是joined_data_v2dfoj参数中使用)的快照: 加入数据v2

请注意,在 中joined_data_v1,被调用的列如何包含来自data.table的列x.dfo的确切值。但是,在 中,被调用的列包含来自 data.table 列的值(而不是来自data.table列的实际数据)。dfocrashesjoined_data_v2dfofrm_dforoadscrashesdfo

这里发生了什么?为什么这行为如此奇怪?为什么dfo/x.dfo结果 data.table 的列中包含的值并不总是准确地反映 data.table 的原始dfo列中包含的crashes内容?

我尝试查看非 equi 连接的一些文档,但在这里找不到任何可以帮助我的东西。

是一个相关的相关问题,但他们没有提到为什么会发生这种行为。

0 投票
2 回答
74 浏览

hive - HIVE 加入时间太长,但在 Impala 上速度很快

我有一个像下面这样的查询。此查询在 Impala 上运行 15 秒,但当我在 HIVE 上运行相同时,需要 10 多分钟。我必须将其他几个表加入到这个查询中(与下面类似的连接)并且它花费的总时间超过 1 小时(有时它会在一小时后失败/卡住),但在 Impala 上它在一分钟内运行。

你能告诉我为什么会发生这种情况以及我如何能够优化下面的蜂巢连接吗?

0 投票
2 回答
38 浏览

r - 两个表的非等连接

我有 2 个数据框,我需要在其中找到 mock$num 中的条目在范围数据框指定的 xy 范围内的次数。

所需的输出如下所示

可以通过以下代码获得

由于 for 循环,上述方法不适合大型数据集,我试图使用非 equi 连接方法(通过data.table)。但是,我不知道如何在两个表之间进行非等连接(不知道如何继续...)

想对这个问题寻求一些指导。感谢你的帮助。

0 投票
1 回答
70 浏览

r - 在data.table中按组按不同范围过滤

我在表中有一些数据,我想做一个非等值连接(我认为是正确的术语),并针对不同的组按不同的范围过滤它。在下面的示例中,我想过滤组“a”,使其仅返回 1 到 20(含)之间的值,组“b”,因此它仅返回 80 到 100(含)之间的值。我的阅读表明这inrange应该是要使用的项目。我知道如何在一般情况下使用它,但我不确定如何让它在不同的范围内按组运行。(示例代码改编自?inrange

创建样本数据

尝试过滤

这显然不起作用,而是将这些范围应用于整个数据集并引发错误消息Ignoring by= because j= is not supplied。我认为我很清楚这不起作用,因为我没有在范围表和 Y 之间创建“连接”,但我没有看到如何使这两个表通过inrange.

注意:实际上 a 中的值将是 posixct 日期时间,但为了简单起见,我在这里没有使用它。

0 投票
1 回答
35 浏览

sql - 用于按等级分组团队的 SQL

给定两个名为 team 和 Award 的表,我需要根据每个团队的排名为团队分配一个奖项。下面是两张表:

团队

team_id 姓名
1 星星 4
2 蠕虫 2
3 鸟类 1
4 小狗 3
5 5
6 野马 8
7 汽车 11
8 骆驼 7
9 9
10 蝗虫 6
11 公牛 10

临界点 数量
1 10000.00
2 7000.00
3 5000.00
6 2000.00
10 500.00

必须将团队分配给这样的奖项:

临界点 数量
1 1 10000.00
2 2 7000.00
3 3 5000.00
4 6 2000.00
5 6 2000.00
6 6 2000.00
7 10 500.00
8 10 500.00
9 10 500.00
10 10 500.00
11 无效的 无效的

我以前从未使用过非 equi 连接,但我认为这可能是一个经典示例,其中非 equi 连接会有所帮助。我写了这个 MySQL 查询,它给出了我想要的结果:

姓名 临界点 数量
鸟类 1 1 10000.00
蠕虫 2 2 7000.00
小狗 3 3 5000.00
星星 4 6 2000.00
5 6 2000.00
蝗虫 6 6 2000.00
骆驼 7 10 500.00
野马 8 10 500.00
9 10 500.00
公牛 10 10 500.00

我的问题是,“使用我不理解的非 equi 连接是否存在问题?” 或者换句话说,“有没有更标准的 SQL 方法来解决这个问题?”

0 投票
3 回答
34 浏览

r - 按组迭代并根据列值映射值

我在 R 中有以下数据框:

还有另一个数据框:

因此,如果我们看一下,df我们可以按目标和组合对数据进行排序,我们会注意到基本上存在“组”。例如target=1comb=0有四个条目p1_start,p1_end,p2_start,p2_end,对于所有其他目标/组合组合都是相同的。
另一方面data包含带有time时间戳的条目。

目标:我想基于time.
示例: 的第一个条目data具有time=2发生在 之间的含义p1_startp1_end因此它应该获取值target=1comb=0映射到data数据框。
示例 2data : with的条目time=14发生在 之间p2_startp2_end因此它们应该获取值target=1comb=1映射到data数据框。

想法df:我以为我通过targetand进行迭代,comb并且为它们的每个组合检查是否有data时间介于两者之间的行。第二个可以使用以下命令完成:

一旦我得到这些行,就很容易附加这些值。 问题:我怎么能做迭代?我尝试了以下方法:

但我收到一个time尚未初始化的错误

0 投票
1 回答
68 浏览

sql - 编译语句时出错:FAILED: SemanticException line 0:undefined:-1

如果有人知道这里的问题是什么?我在 Hive 中运行它

编译语句时出错:FAILED: SemanticException line 0:undefined:-1 在 JOIN 'end_dte' 中遇到左右别名

0 投票
1 回答
19 浏览

sql - 如何在 Hive 中编写非 equi 连接

我的表格包括 3 个日期列, dateA , dateB 和 dateC 我需要什么:

JOIN 在 Teradata 中运行良好,但在 Hive 中运行时出现错误。

错误:

JOIN dateB 中遇到左右别名

我真的很感激这方面的一些帮助!