示例: 建立测试表,并初始化数据测试
CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `base_org_id` int(11) DEFAULT NULL, `account_period` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (`id`), KEY `base_org_index` (`base_org_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (1, 1, '2019-07'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (2, 1, '2019-08'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (3, 1, '2019-09'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (4, 2, '2019-07'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (5, 2, '2019-08'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (6, 2, '2019-09'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (7, 2, '2019-10'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (8, 2, '2019-11'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (9, 2, '2019-12'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (10, 3, '2019-07'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (11, 3, '2019-08'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (12, 4, '2019-07'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (13, 5, '2019-07'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (14, 6, '2019-07'); INSERT INTO `mytest`.`test`(`id`, `base_org_id`, `account_period`) VALUES (15, 7, '2019-07');
执行查询code
SELECT T1.* FROM test T1 LEFT JOIN test T2 ON T1.base\_org\_id = T2.base\_org\_id AND T1.id < T2.id WHERE T2.id IS NULL
思路:io
对同一张表进行左关联,示例中以好比base_org_id为关联关系,好比base_org_id 为1的数据有2条,关联后base_org_id为1的数据有4条,这时候关键一个条件T1.id < T2.id做用就体现出来了,T1的ID为3时 T2中的ID没有超过三的,因此此时只有一条数据T1中的数据而T2中没有数据。最后条件T2.id IS NULL过滤出来,即须要的数据