根据表的子集的最大值获取行

时间:2015-08-27 09:35:55

标签: java hibernate spring-mvc

我想根据一列的值过滤表格,然后获取每个值的最大值。

e.g。

id | value
-----------
0  | 10
0  | 22
0  | 50
1  | 33
1  | 4
2  | 5
2  | 23
2  | 33
3  | 22
3  | 50

按ID为2和3的行进行过滤,然后获取每个ID的最大值

id | value
-----------
2  | 33
3  | 50

如何使用hibernate来使用它?

这是我的尝试:

    List<int> ids = ... // Retreived from elsewhere

    Disjunction disjunction = Restrictions.disjunction();
    for(int id: ids){
        disjunction.add(Restrictions.eq("id", id));    // Specify which IDs
    }

    @SuppressWarnings("unchecked")
    List<Item> items= (List<Item>) sessionFactory.getCurrentSession()
            .createCriteria(Item.class)
            .add(disjunction)
            .setProjection(
                Projections.projectionList()
                    .add(Projections.max("value"))
                    .add(Projections.groupProperty("id")
                )
            )
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .list();

这只是给我带有最高值的'id'(例如3,而不是整行)

我想在spring mvc app中这样做。

提前致谢

1 个答案:

答案 0 :(得分:0)

select MAX(id),max(value) from ABCD where id in (110,56001) group by id

尝试使用此查询在表单中执行以获得预期的输出。