spring-boot - JpaSpecificationExecutor 按组和最大日期值过滤数据
问题描述
我正在尝试使用 JpaSpecificationExecutor 过滤具有条件 groupBy 和 Max Date 的数据。
目前,为了获得输出,我正在使用这个基于排名的查询。在我的数据库中有很多记录(数十万条记录)。获取查询结果的时间太长。我知道通过使用 JpaSpecificationExecutor,我们可以更快地获取数据。
SELECT * FROM (SELECT *, Rank() over (Partition BY code ORDER BY dateTime DESC ) AS Rnk FROM user) pd WHERE Rnk <= 1
请帮助我在 jpa 规范中实现相同的标准,下面我附上了示例表图像、现有表和预期输出。
实体类
Class User{
private Long id;
private String code;
private String dateTime;
}
存储库接口
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User>{}
用户规范类
public class UserSpecification implements Specification<User>{
private final User criteria;
public UserSpecification(User criteria) {
this.criteria=criteria;
}
@Override
public Predicate toPredicate(Root<User > root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
// TODO Auto-generated method stub
return null;
}
}
服务等级
public class UserService {
pubilic List<User> findAll(){
Specification<User> spec = new UserSpecification();
List<User> users = userRepository.findAll(spec);
}
}
表数据
预期产出 预期产出
解决方案
推荐阅读
- android - Visual Studio 2017 - 将 C++ 共享库与 Android 中的 C++ 库链接
- php - 处理 Laravel Blade View::render() 异常
- c# - 从 c# 中的 httpwebrequest 获取垃圾内容
- python-3.5 - ImportError:无法在 python3.5 中导入名称“_representation”(所有模块均已升级)
- postgresql-9.3 - Postgres 编号取决于下一个 id
- stripe-payments - 0 美元订阅的条带处理费
- javascript - 单选按钮是选择多个项目而不是选择一个项目
- javascript - 从函数 div 加载时,jquery appendTo 效果淡入淡出
- sql - 内连接、自然连接和等值连接
- python - Python 中 Google Text-to-Speech API 的 Speed 和 Pitch 的有效值