Sql 如何在Hibernate中编写包含行数函数的查询?

Sql 如何在Hibernate中编写包含行数函数的查询?,sql,hql,Sql,Hql,我想将以下查询转换为HQL select X.* from (select tbl.*,ROW_NUMBER() over (partition by Col1 order by Col1) as RANK from table1 tbl where tbl.col2='22' and ( tbl.col3 in ( 'ABC'

我想将以下查询转换为HQL

select X.* from (select tbl.*,ROW_NUMBER() over (partition by Col1 order by Col1) as RANK from table1 tbl where tbl.col2='22'
                    and (
                        tbl.col3 in (
                            'ABC'
                        )
                    ) 
              ) X
             WHERE X.rank = 1;
需要帮助。 这是在Oracle上将MySQL group by转换为等效group by的上下文中实现的

编辑: 我最初的MySQL查询是

select * from table1 tbl 
where tbl.col2='22'
and tbl.col3 in ('ABC','XYZ')
group by col1;

我想先将其转换为Oracle等效查询,然后再转换为HQL。

我认为您的查询与此查询非常接近:

select X.*
from table1 tbl
where tbl.col2 = '22' and tbl.col3 = 'ABC' and
      not exists (select 1
                  from table tbl2
                  where tbl2.col2 = tbl.col2 and tbl2.col3 = tbl.col3 and
                        tbl2.col1 < tbl.col1
                 );
唯一的区别是这两个查询如何处理col1上的关系。这将返回所有这些值。您的将只返回其中一个


也许这在HQL中适用。

如果Col1不是数字数据类型,该怎么办?上述内容应该在Oracle和MySQL中都适用,很可能在HQL中也适用。My的目的是模拟group by,如果存在重复的值,则查询可能返回重复的值col1@user3705949 . . . 如果表中有唯一的id,则可以修复此问题。您的原始查询依赖于GroupBy的仅MySQL扩展,因此无论如何都很难移植。