【问题标题】:hql max timestamp and unique idhql 最大时间戳和唯一 ID
【发布时间】:2020-06-03 18:50:18
【问题描述】:

我有唯一 ID 列表。 我想从表 VideoStat 中获取时间戳为最大值的 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=[656,657] 那么它应该返回第 1 行和第 3 行

我收到以下错误: java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:在第 1 行附近,第 17 列 [SELECT DISTINCT IN (:ids) * FROM com.sociopool.entity.VideoStat WHERE timestamp = (SELECT MAX(时间戳)]

@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;


}

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    你需要这样的查询

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多