【发布时间】:2015-07-28 14:03:20
【问题描述】:
假设我有一张如下表:
CREATE TABLE "test_ids" (
var1 TEXT,
var2 TEXT,
var3 TEXT,
time INT
);
INSERT INTO "test_ids" VALUES
('d1', 'i1', 'f1', 1),
('d2', 'i1', 'f1', 2),
('d2', 'i2', 'f1', 3),
('d1', 'i1', 'f2', 4),
('d3', 'i3', 'f3', 1),
('d3', 'i4', 'f3', 2),
('d3', 'i5', 'f3', 3),
('d3', 'i3', 'f4', 4),
('d4', 'i1', 'f5', 5);
在 var1、var2、var3 列之间存在多对多关系,它们的每个组合在首次观察到该组合时存储在一行中。
但是,用户和变量之间存在一对多的关系。也就是说,一个变量(var1、var2 或 var3)只能被一个用户观察到。
我想生成一个表,该表将唯一的 user_id 应用于我们计算出的属于一个用户的所有行 - 例如,所有行:
d1- 任何与
d1一起观察到的var2或var3 - 任何
var3与任何var2s 一起被观察到,但var1不同 - 任何
var2与任何var3s 一起被观察到,但var1不同 - 与
var2s 或var3s 中的任何一个一起观察到的任何其他var1
在本例中,输出将是:
user | var1 | var2 | var3 | time
------+------+------+------+------
u1 | d1 | i1 | f1 | 1
u1 | d2 | i1 | f1 | 2
u1 | d2 | i2 | f1 | 3
u1 | d1 | i1 | f2 | 4
u2 | d3 | i3 | f3 | 1
u2 | d3 | i4 | f3 | 2
u2 | d3 | i5 | f3 | 3
u2 | d3 | i3 | f4 | 4
u1 | d4 | i1 | f5 | 5
不用担心如何使用户 ID 独一无二 - 我可以做到这一点。但是,我正在努力解决 ID 的递归连接问题。
【问题讨论】:
-
您是否尝试过使用
row_number()函数? -
谢谢你,@vkp - 是的。这可以解决第一个要点。然而,当我试图理清所有变量之间的多对多关系时,我被束缚住了。如果您有使用
ROW_NUMBER()解决该问题的代码示例,我很乐意看到! -
据我所知,
row_number()函数是不可能的 -
@Serenthia 我不明白用户字段的来源。您怎么知道 u1 与 d1、i1、f1 相关?它在另一张桌子上吗?让我们将“手动”示例更清晰,然后也许我们可以找到解决方案。
-
@Gluz 我将只使用最终集合中的任何 var1 - 一个 var1 不可能出现在多个集合中,因此这将是一个唯一标识符。这不是我的问题——我还没有找到一种方法来对为一个用户显示的所有 var1s/var2s/var3s 进行分组,以便用相同的用户 ID 标记它们——即。认识到第 1、2、3、4 和 9 行都是一个用户,而第 5、6、7、8 行是另一个用户
标签: sql amazon-redshift