简体   繁体   中英

find duplicates in range SQL

I have some sort of table containing lot of numeric data: for instance, for one of the table I have such values

    CREATE TABLE `mdacardrange` (
  `rID` decimal(20,0) NOT NULL DEFAULT '0',
 ,
  `range_begin` varchar(254) DEFAULT NULL,
  `range_end` varchar(254) DEFAULT NULL,

  PRIMARY KEY (`rID`),

);

INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (1,'4567890000000000000','4567899999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (2,'5264800000000000000','5264809999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (3,'5193060000000000000','5193069999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (4,'5482150000000000000','5482159999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (5,'5416710000000000000','5416719999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (6,'5167340000000000000','5167349999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (7,'4043090000000000000','4043099999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (8,'4043110000000000000','4043119999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (9,'4226060000000000000','4226069999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (10,'4043100000000000000','4043109999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (11,'4063710000000000000','4063719999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (12,'4098050000000000000','4098059999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (15,'4779040000000000000','4779049999999999999');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (16,'5223050000000000000','5223059999999999999');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (17,'4703770000000000000','4703779999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (18,'5483930000000000000','5483939999999999000');
INSERT INTO `mdacardrange` (`rID`,`range_begin`,`range_end`) VALUES (19,'5341480000000000000','5341489999999999999');

My task is to compare this data ranges for duplicates. Unfortunately, i don't even know how to deal with such data, as i understand, somehow i need to calculate whole ranges for each row, and then compare, can somebody help me with such issue?

Your CREATE TABLE contains a few typos...

I think something like this should work:

SQL> select 
         a.*, b.rID as overlapped_id 
     from 
         mdacardrange a inner join mdacardrange b on 
             a.range_begin < b.range_end and 
             a.range_end > b.range_begin and 
             a.rID <> b.rID 
     ;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM