【发布时间】:2020-08-06 18:58:26
【问题描述】:
我想比较不同天数的产品。目标是获取第 1 天和第 2 天、第 2 天和第 3 天之间的差异,依此类推。
Product EventTime
X1 T1
X2 T1
X1 T2
X3 T2
X4 T10
注意事项
- 活动时间不固定,可能是第 1 天第 2 天,然后是第 10 天)
- 产品由多个属性呈现,但为了显示问题,我使用了 1 个字段
预期结果
Product Action EventTime
X1 Added T1
X2 Added T1
X2 Removed T2
X3 Added T2
X1 Removed T10
X3 Removed T10
X4 Added T10
我的想法是为这些记录提供行号并进行完全外部连接以找出差异,但我无法获得正确的结果。
我的思考过程 - 让我们按事件时间排名。
Product EventTime RNK
X1 T1 1
X2 T1 1
X1 T2 2
X3 T2 2
X4 T10 3
如果我们这样做
select
*
from
dataset d1
full join
dataset d2
on d1.product = d2.product
and d1.RNK = d2.RNK - 1
where
d1.product is null or d2.product is null
它没有给我正确的结果。但是如果我先清理数据来制作它
Product EventTime RNK
--------------------- X1 T1 1 (cross out)
----------------------X2 T1 1
X1 T2 2
X3 T2 2
X4 T10 3
Product EventTime RNK
X1 T1 1
X2 T1 1
X1 T2 2
X3 T2 2
-------------------- X4 T10 3 (cross out)
我们对上述数据集进行完全连接。我会得到正确的结果,但性能很慢。基本上我去掉了第一名和最后一名。
对于按天序列获取 2 组之间的差异有什么想法吗?
【问题讨论】:
-
我不遵循逻辑。你能解释一下吗?
-
是的。我每天都有产品数据。我想将第 1 天的产品与第 2 天的产品进行比较,将第 2 天的产品与第 3 天的产品进行比较,依此类推。
标签: sql oracle join gaps-and-islands