日期:2014-05-16  浏览次数:20946 次

数据查重,不连续数据
表A中有如下字段:id(number),code(varchar),type(number),start_tm(varchar),end_tm(varchar),start_week(number),end_week(number).
code为代码,type为类型(只有1,和2),start_tm为开始时间从0000-2400,end_tm为结束时间从0000-2400,start_week为开始星期从1-7,end_week为结束星期从1-7.
如(1,'AAAAA',1,'0000','2400',1,7)表示代码为'AAAAA'商家当类型为1时的有效时间是从星期一的'0000'到'2400'也就是从零点到24点,到星期日的'0000'到'2400'也就是从零点到24点;
现在要求查出表中同一商家有效时间重叠‘交叉的记录。类型不要求相同
有这几条记录
(2,'AAAAA',1,'0000','2000',1,7)与(3,'AAAAA',2,'1800','0000',1,7)时间交叉
(6,'CCCCC',1,'0000','2400',2,7)与(7,'CCCCC',2,'0000','2400',1,5)星期交叉
(8,'DDDDD',1,'0800','2400',2,7)与(9,'DDDDD',2,'2200','0800',1,5)时间和星期都交叉
(4,'BBBBB',1,'0000','2400',1,7)与(5,'BBBBB',2,'0800','2000',1,7)时间重叠
(10,'EEEEE',1,'0000','2400',1,7)与(11,'EEEEE',2,'0000','2400',2,5)星期重叠
(12,'GGGGG',1,'0800','2200',1,7)与(5,'GGGGG',2,'2100','0800',2,5)时间星期重叠
另外还要查出不连续的数据如给'AAAAA'配置了星期一到星期三 和 星期六到星期日 而没有配星期四和星期五也要查出来
同样时间也是一样不能有空缺,不连续。




------解决方案--------------------
1 首先转换出起始时间和结束时间,
start_week+start_tm/2400 a, end_week+stop_tm/2400 b

2 按时间交叉的类似,前交叉、后交叉、包含分别写比较语句进行判断