在jOOQ中使用rank()的嵌套查询

时间:2015-01-31 21:33:04

标签: postgresql jooq

我有一个像这样的SQL查询:

select t1_id, t2_id, n, v, rank
from
  (
   select t3.t1_id, t3.t2_id, t1.n, t2.v, rank() over (partition by t3.t1_id order by t3.c desc) as rank
   from t3 join t2 ON t3.t2_id = t2.id join t1 ON t2.t1_id=t1.id
   where t1.a='val' and t2.d id null
   order by t1.n, t2.v
  ) as ss
where rank>1
order by rank desc
limit 1

我无法将其转换为jOOQ,特别是导致编译错误的rank>1部分。这就是我到目前为止所做的:

SelectConditionStep query = jooq.select(T3.T1_ID, T3.T2_ID, T1.N, T2.V, rank().over(partitionBy(T3.T1_ID).orderBy(T3.C.desc())).as("rank"))
  .from(T3.join(T2).onKey().join(T1).onKey())
  .where(T1.A.eq('val')).and(T2.D.isNull());

jooq.select(query.field(T3.T1_ID), query.field(T3.T2_ID), query.field(T1.N), query.field(T2.V), query.field("rank"))
  .from(query)
  .where(query.field("rank").greaterThan(1))
  .orderBy(query.field("rank").desc())
  .limit(1)
  .fetch();

我能让它发挥作用的唯一方法是使用where("rank>1")

以类型安全的方式翻译查询的正确方法是什么?

0 个答案:

没有答案