我在oracle中有以下查询,我想在hibernate中使用,但无法解决如何在内部查询中使用rownum变量。查询如下:
select emp.prof_key, emp.prof_display_name
from empinst.emp emp
where emp.prof_key IN (select x.object_key
from (select event.object_key as object_key
from empinst.eventlog event
where event.event_name = 'profiles.created'
and event.event_source = 'Profiles'
order by event.created desc) x
where rownum <= 10)
我能弄清楚如何做到这一点的唯一方法是将查询分成两部分,但我认为必须有一种更有效的方法在hibernate中执行它。
提前致谢。
迈克尔。
答案 0 :(得分:1)
您的查询不会过滤最近的10条记录。它将返回10个随机记录(随机顺序不可靠),因为没有ORDER BY子句。
我不熟悉hibernate的局限性,但与所有限制工具一样,我非常确定你可以通过深思熟虑的视角解决它们。
例如,此视图将包含一个排名列,可用于根据排序列(event_name, event_source)
过滤event_date
任意组合的10条最新记录:
CREATE VIEW eventlog_rank_v AS
SELECT e.*,
row_number() OVER (PARTYTION BY e.event_name,
e.event_source
ORDER BY e.event_date DESC) event_rank
FROM empinst.eventlog e;