根据某一字段虑重保留ID最大的一列

示例: 建立测试表,并初始化数据测试

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过滤出来,即须要的数据
相关文章
相关标签/搜索