shardingsphere 使用 mybatisplus 实现分组后查询每组最新一条数据
时间: 2024-02-06 16:09:03 浏览: 157
可以使用ShardingSphere的聚合函数和子查询来实现分组后查询每组最新一条数据。
假设有以下表结构:
```
CREATE TABLE `t_order` (
`order_id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
```
可以按照以下步骤来实现分组后查询每组最新一条数据:
1. 使用MybatisPlus的Wrapper对象构造查询条件,按照user_id分组并求出每组最大的create_time:
```java
QueryWrapper<Order> wrapper = new QueryWrapper<>();
wrapper.select("user_id", "MAX(create_time) as max_create_time");
wrapper.groupBy("user_id");
```
2. 将上一步查询结果作为子查询,根据user_id和create_time查询最新一条记录:
```java
QueryWrapper<Order> wrapper2 = new QueryWrapper<>();
wrapper2.inSql("concat(user_id, ',', create_time)", "select concat(user_id, ',', max_create_time) from t_order group by user_id");
List<Order> orders = orderMapper.selectList(wrapper2);
```
这里使用了concat函数把user_id和create_time拼接成一个字符串,然后再跟子查询中的结果进行匹配,从而查询到最新的一条记录。
阅读全文