我有一个组织和个人之间关联的MyISAM表。每条记录都有一个开始和结束日期。这些记录是在处理大型文本文件时添加的,所以我不做大量的处理和清理,因为它们是为了加速文本解析而添加的。但是,某些记录是冗余的或可能是多余的,因为它们包含重叠的日期范围。由于重叠日期而从MySQL表中删除冗余条目
举例来说,我可能有以下几点:
aff_id aff_e1_id aff_e1_type aff_e2_id aff_e2_type aff_start aff_end
------ --------- ----------- --------- ----------- ----------- ----------
01 172 org 131 indiv 1997-01-22 1998-03-31
02 172 org 131 indiv 1997-01-22 1999-04-03
03 100 org 127 indiv 1995-01-02 2000-01-05
04 100 org 127 indiv 1994-01-24 1999-03-04
我想要做的是结合是多余的关系记录和修改日期范围,包括任何重叠。例如,前两个记录和最后两个记录可以分别组合,并且修改日期以包含两个日期。
有没有办法在MySQL中完全做到这一点?
编辑: 针对下面的评论,2,3,4,5列需要相同,然后检查日期是否重叠(如果它们完全不重叠,可以让它们单独存在)。
一个存储过程会很棒,但是比使用游标遍历所有记录并一对一地比较它们有更快的方法吗?
你可以在存储过程中做到这一点...你问它是否可以只用一个SQL语句来完成?我认为这很难拉开。分组行的标准是什么 - 第2,3,4和5列是相同的,并且日期重叠? – 2011-05-17 21:03:39
@Paul W - 请参阅编辑以了解您的意见。 – tchaymore 2011-05-17 22:32:36
假设您的数据包含一些范围重叠,一些不重复,而您只想合并重叠的范围,则可以使用使用自连接的更新语句来完成。我开始考虑如何解决这个问题,但不知道艾克的答案是否足够适合你。 – 2011-05-17 22:50:40