【发布时间】:2015-11-06 20:18:53
【问题描述】:
我正在使用 SQL 和 R 进行分析,我想加入如下所列的两个表:
表 1:
ID date
a11 20150302
a11 20150302
a22 20150303
a22 20150304
a33 20150306
a44 20150306
a55 20150307
a66 20150308
a66 20150309
a66 20150310
表 2
ID date
a11 20150303
a22 20150304
a22 20150305
a44 20150306
a66 20150308
a66 20150310
情况是这样的:客户接到电话(表 1),客户回电了解更多信息(表 2)
所以我想在分析中做的是:
- 只显示两个表中的 ID。
- 将表 2 日期与表 1 日期匹配:
- 匹配最近的日期
- 表 2 日期必须 >= 表 1 日期 (如结果“a66”中的示例 20150310 分配给 table1 日期 20150310,而 20150308 分配给 20150308,而不是 20150309)
结果:
ID table1 date table2 date
a11 20150302
a11 20150302 20150303
a22 20150303 20150304
a22 20150304 20150305
a44 20150306 20150306
a66 20150308 20150308
a66 20150309
a66 20150310 20150310
对于这种多对多(但我不希望 n*m 作为结果,我想要 1 对 1)匹配/加入,是否有任何解决方案?将需要 R 或 SQL 中的解决方案。
谢谢
【问题讨论】:
-
如果表 2 日期必须 >= 表 1 日期,为什么会有空格?在 table2 日期?
-
为什么
a11有两行?您的 2.1 规则说与最接近的日期匹配。null不是最近的日期。 -
你能更好地解释一下你的规则吗?不知道为什么
a11 20150302同时有 null 和20150303。还有为什么a66 20150309 null而不是a66 20150309 20150310 -
1.空格,因为对于某个 ID,表 1 有 3 条记录,而表 2 只有 2 条记录...就像打电话给客户 3 次,但客户只回电 2 次,所以空白表示客户没有回电的时间
-
规则更像是,匹配是从表 2 一侧,表 2 将其日期匹配到表 1 中最接近的日期。而对于 a11,由于表 2 只有一个值,所以即使如果 a11 有两个 20150302,但我只想匹配其中一个,那么它会显示客户只调用一次......而不是两次
标签: sql r many-to-many match seq