1.问题
对一列进行分组,根据若干个字段排序
2.案例

3.SQL
3.1 建表及记录
1CREATE TABLE `Orders` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `shop_id` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL, 4 `pay_date` datetime DEFAULT NULL, 5 `pay_no` int(11) DEFAULT NULL, 6 PRIMARY KEY (`id`) 7) ENGINE=InnoDB AUTO_INCREMENT DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin 8 9INSERT INTO `Orders`(`id`, `shop_id`, `pay_date`, `pay_no`) VALUES (1, '1001', '2020-01-11 16:43:25', 5); 10INSERT INTO `Orders`(`id`, `shop_id`, `pay_date`, `pay_no`) VALUES (2, '1001', '2020-01-10 16:43:57', 3); 11INSERT INTO `Orders`(`id`, `shop_id`, `pay_date`, `pay_no`) VALUES (3, '1002', '2020-01-17 16:44:09', 4); 12INSERT INTO `Orders`(`id`, `shop_id`, `pay_date`, `pay_no`) VALUES (4, '1002', '2020-01-11 16:44:24', 2); 13INSERT INTO `Orders`(`id`, `shop_id`, `pay_date`, `pay_no`) VALUES (5, '1002', '2020-01-11 16:44:24', 1); 14INSERT INTO `Orders`(`id`, `shop_id`, `pay_date`, `pay_no`) VALUES (6, '1002', '2020-01-12 16:44:24', 0);
3.2 最终sql
方法1:GROUP_CONCAT实现(数据库版本[5.7.16])
1select * from Orders 2where id in ( 3select SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY pay_date,pay_no),',',1) from Orders 4GROUP BY shop_id 5)
方法2:子查询实现(数据库版本[5.6.16])
1select t.* from ( 2 select * from Orders ORDER BY pay_date ,pay_no 3)t 4GROUP BY t.shop_id;
方法2有可能是不行的,不知道是数据库版本问题还是哪里设置没有
3.3 注意点
GROUP_CONCAT有长度限制,记录过多需要注意设置以下配置 SET @@global.group_concat_max_len=数字