所以我有一个这样的表,但每周更新大约3500条记录:
OID UNIQUEID RTYPE TIME OTHER
1 ABC_20170215 SENT 12:30 item1
2 ABC_20170215 RECEIVED 12:29
3 ABC_20170215 SENT 12:35 item4
所以我想要做的是如果UNIQUEID是重复的并且RTYPE是不同的,我需要合并该对的行。如果有3个如上所述,我需要合并时间最接近的对,因此得到的表格如下所示
OID UNIQUEID RTYPE TIME OTHER
1 ABC_20170215 <whatever> <whatever> item1
3 ABC_20170215 <whatever> <whatever> item4
rtype和time字段实际上并不重要,因为如果需要可以删除这些字段,或者可以计算这些字段,并不重要。希望有人之前做过这类事,并有一些示例代码来完成这项工作。
这与之前发布的不一样!!!我没有删除重复项,我根据对比较和最接近0的时差合并它们。
所以我需要的是
UNIQUEID = UNIQUEID <- duplicates/matches
and
RTYPE != RTYPE <- different
如果有多对可能性,则减去两者之间的时间,因此对于我的示例表
Pair1.Time - Pair1.Time = 1 (12.30-12.29)
Pair2.Time - Pair2.Time = 6 (12.29-12.35)
和最接近0的那个,合并那个对,但老实说可能是一对无限的对可能性
答案 0 :(得分:2)
据我所知,我解决了这个问题。你能试试吗? 我并不认为这是最好的解决方案。如果有人回答得更好我也希望看到透视
;WITH cte AS
(
select t.OID, tm.UNIQUEID, tm.RTYPE,
ROW_NUMBER() OVER(PARTITION BY tm.UNIQUEID, tm.RTYPE ORDER BY t.OID ) AS rno
from (
select UNIQUEID, RTYPE
from MergeTable
group by UNIQUEID, RTYPE
) tm
inner join mergeTable t on t.UNIQUEID = tm.UNIQUEID and t.RTYPE = tm.RTYPE
)
select * from cte where rno = 1
在我的示例数据中:
OID UNIQUEID RTYPE TIME OTHER
1 ABC_20170215 SENT 12:30 item1
2 ABC_20170215 RECEIVED 12:29 NULL
3 ABC_20170215 SENT 12:31 item4
4 ABC_20170216 SENT 12:32 item3
运行查询后:
OID UNIQUEID RTYPE TIME OTHER
1 ABC_20170215 SENT 12:30 item1
2 ABC_20170215 RECEIVED 12:29 NULL
4 ABC_20170216 SENT 12:32 item3
希望对你有帮助。