我有一个包含ID
,DATES
,RATES
列的表格,一个ID
(客户)有多个rates
,但只有一个rate
{关于一个特定date
的{1}}。
ID DATES RATES
5 2014-07-01 0.02
5 2014-07-02 0.03
5 2014-07-03 0.04
因此,一个ID
一段时间内只能有一个费率更改路径,因为一个ID
在特定rate
上只分配了一个date
。但是有些ID
具有完全相同的速率变化路径,因为可以将同一rate
分配给多个ID
。例如,ID
5& 6随着时间的推移具有相同的速率变化路径。
ID DATES RATES
5 2014-07-01 0.02
5 2014-07-02 0.03
5 2014-07-03 0.04
6 2014-07-01 0.02
6 2014-07-02 0.03
6 2014-07-03 0.04
我的目标是找出具有相同费率变化路径的客户(理想输出为,费率路径1包括ID
5& 6. ID
列包括{{1具有相同的速率变化路径)。
ID
我希望在Rstudio上使用R或sqldf包来解决这个问题。样品表如下所示。有一点需要指出,ID 1和3共享相同的模式,即使ID 3比ID 1晚一天,但如果你做一个关于它们的速率的折线图,这两行将完全重叠。然而,ID 1和ID 2并不共享相同的模式,因为即使前三天他们共享相同的模式,但最后一天他们的费率是不同的。这两条线不会重叠。
Rate Path ID
1 5,6
2 1,3
我目前正在使用绝对差异的成对和来解决这个问题。但是大数据需要经过大量的计算。我在考虑解决这个问题的其他更好方法吗?
答案 0 :(得分:0)
你似乎在寻找一件事是另一件事的确切子集。一种自然的方法是使用数组。但是,我不知道一个简单的"包含"匹配订单和元素。所以,我会使用字符串:
with t as (
select id,
(',' || string_agg(rate, ',' order by date) || ',') as rates
from yourtable t
group by id
)
select t1.*, t2.*
from t join
t t2
on t.rates like '%' || t2.rates || '%';