mybatisplus分组后查询每组最新一条数据
时间: 2023-07-29 20:07:23 浏览: 660
可以通过Mybatis Plus的Lambda QueryWrapper和子查询来实现分组后查询每组最新一条数据的功能。具体实现步骤如下:
1. 构建Lambda QueryWrapper对象,设置分组条件和排序条件:
```
QueryWrapper<Entity> wrapper = new QueryWrapper<>();
wrapper.select("group_id", "max(create_time) as create_time")
.groupBy("group_id")
.orderByDesc("create_time");
```
2. 构建子查询,查询每组最新一条数据的id:
```
QueryWrapper<Entity> subWrapper = new QueryWrapper<>();
subWrapper.select("id")
.inSql("concat(group_id, '_', create_time)",
"select concat(group_id, '_', max(create_time)) from entity group by group_id");
```
3. 根据子查询构建Lambda QueryWrapper对象,查询每组最新一条数据的详细信息:
```
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", subWrapper);
List<Entity> entityList = entityMapper.selectList(queryWrapper);
```
其中,第1步中的select语句中,group_id为分组字段,create_time为时间字段,max(create_time)表示获取每组中最新的一条数据的时间。orderByDesc("create_time")表示按时间倒序排列,确保每组最新的一条数据排在最前面。
第2步中的子查询中,concat(group_id, '_', create_time)表示将group_id和create_time拼接成一个字符串,以便后面使用inSql函数查询。
第3步中的in函数中,将子查询的结果作为参数传入,查询每组最新的一条数据的详细信息。
这样就可以实现分组后查询每组最新一条数据的功能了。