Hibernate hql最大时间戳和唯一id
我有唯一ID的列表。 我想从VideoStat表中获取时间戳为max的ID列表的记录。 该表有多条id相同的记录 例如: 视频统计: ‘657’、‘228492’、‘36423418’、‘8982’、‘5059’、‘2020-06-03 17:18:27’ '656','942203','354386731','118191','51575','2020-06-03 17:22:01' ‘656’、‘942203’、‘354387722’、‘118191’、‘51575’、‘2020-06-03 17:22:25’ 如果我有id=[656657],那么它应该返回第1行和第3行 我得到以下错误: java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:在第1行第17列附近[在:ids*FROM com.sociopool.entity.VideoStat中选择DISTINCT IN,其中timestamp=选择MAXtimestamp]Hibernate hql最大时间戳和唯一id,hibernate,hql,Hibernate,Hql,我有唯一ID的列表。 我想从VideoStat表中获取时间戳为max的ID列表的记录。 该表有多条id相同的记录 例如: 视频统计: ‘657’、‘228492’、‘36423418’、‘8982’、‘5059’、‘2020-06-03 17:18:27’ '656','942203','354386731','118191','51575','2020-06-03 17:22:01' ‘656’、‘942203’、‘354387722’、‘118191’、‘51575’、‘2020-06-03
@Override
public List<VideoStat> getActiveVideo() {
Session session=sessionFactory.getCurrentSession();
//Get list of id from video table where is_active=1
List<String> ids = session.createQuery("SELECT id from Approval where is_active=:activeStatus").setParameter("activeStatus", 1).getResultList();
System.out.println("Active id list "+ ids);
//Get max(timestamp) stat for each id
String getStatQuery = "SELECT DISTINCT IN (:ids) * FROM VideoStat WHERE timestamp = (SELECT MAX(timestamp)";
List<VideoStat> videoStatList = session.createQuery(getStatQuery).setParameter("ids",ids).getResultList();
System.out.println("Video stats list " + videoStatList);
return videoStatList;
}
您需要这样的查询
List<VideoStat> videoStatList = session.createQuery(
"SELECT s FROM VideoStat s WHERE s.id IN :ids AND s.timestamp = ALL (SELECT MAX(sub.timestamp) FROM VideoStat sub WHERE sub.id IN :ids)"
).setParameter("ids",ids).getResultList();