Java criteria API谓词:在一列上分组,在另一列上查找行min,然后返回第三行
我有一张桌子 创建表stp2\U vehicles.can\U数据 id bigserial不为空, 接收时间时间戳不为空, gps\u帧\u id int8空 ; 在此基础上,我需要添加更大查询所需的条件谓词。 在这里,我需要的是选择返回can_数据的id-每个gps帧只有一个id,即具有最早时间戳的id 因此,在sql中,它将如下所示: 选择cd.id 来自stp2_vehicles.can_数据cd 右连接 选择gps\u帧\u id,最小接收时间作为最小时间 来自stp2_vehicles.can_数据 按gps\u帧\u id分组 cd.gps\帧\ id=cd2.gps\帧\ id和cd.receive\ U time=cd2.min\时间 ; 不幸的是,CriteriaAPI不支持与子查询的结果连接 我也尝试过使用criteria api支持的自连接方法,但我提供的解决方案在计算上似乎太复杂,或者有错误,我看不出来: 选择cd.id 来自stp2_vehicles.can_数据cd 内部连接stp2\U车辆。can\U数据cd2在cd上。id=cd2.id 其中cd.receive_time=从stp2_vehicles.can_data cd3中选择minreceive_time,其中cd.gps_frame_id=cd3.gps_frame_id; 顺便说一下: 我设法解决了更简单的问题: 按cd.gps\U帧\U id从can\U数据cd组中选择mincd.id CriteriaQuery CriteriaQueryCanada=cb.createQueryCanada.class; Subquery Subquery=criteriaQueryCanData.subqueryLong.class; 根CanDataSubcoot=subquery.fromCANData.class; 子查询 .selectcb.leastcandaustabroot.getCANData\uuu.ID .groupBycanDataSubRoot.getCANData.GPS\u帧;Java criteria API谓词:在一列上分组,在另一列上查找行min,然后返回第三行,java,hibernate,jpa,criteria,criteria-api,Java,Hibernate,Jpa,Criteria,Criteria Api,我有一张桌子 创建表stp2\U vehicles.can\U数据 id bigserial不为空, 接收时间时间戳不为空, gps\u帧\u id int8空 ; 在此基础上,我需要添加更大查询所需的条件谓词。 在这里,我需要的是选择返回can_数据的id-每个gps帧只有一个id,即具有最早时间戳的id 因此,在sql中,它将如下所示: 选择cd.id 来自stp2_vehicles.can_数据cd 右连接 选择gps\u帧\u id,最小接收时间作为最小时间 来自stp2_vehicle
由于子查询似乎是静态的,因此可以使用@Subselect注释为子查询的结果定义一个实体