mysql 分组获取时间最新的一条记录

数据库:mysql
版本:5.7.21

项目开发中 需要用到分组取最大行 试了很多种方法 网上的也看了很多种
这是和同事发现的 我觉得最好用一种

测试数据库:

DROP TABLE IF EXISTS `audit_record`;
CREATE TABLE `audit_record`  (
  `audit_record_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '表主键',
  `entrust_department_id` bigint(20) NULL DEFAULT NULL COMMENT '任务表id',
  `audit_record_person_id` bigint(20) NULL DEFAULT NULL COMMENT '处理人id',
  `audit_record_person` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '处理人',
  `audit_record_operation` enum('提交审核','通过审核','驳回审核','提交批准','通过批准','驳回批准','不出具报告','创建任务','报告打印','任务回滚') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作',
  `audit_record_time` datetime(0) NULL DEFAULT NULL COMMENT '处理时间',
  `audit_record_remarks` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '批注',
  PRIMARY KEY (`audit_record_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 365 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '记录表' ROW_FORMAT = Dynamic;

正常分组sql

SELECT
	* 
FROM
	audit_record 
GROUP BY
	audit_record_operation

在这里插入图片描述
网上有种说法 在5点几版本之前 可以先子查询排序在分组 是可以的
但是 好像到5点几版本后这个方法失效了,网上有说在子查询里加 limit
这种方法是可以的 但是就是很不方便
这是 时无意中发现的 having 加到子查询里 也是可以使排序生效
分组取时间最大sql
如果有查询条件 可以直接加在 having前 不影响排序

SELECT
	ar.* 
FROM
	( SELECT * FROM audit_record HAVING 1 ORDER BY audit_record_time DESC ) ar 
GROUP BY
	ar.audit_record_operation

运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值