我有一个像这样的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")
以类型安全的方式翻译查询的正确方法是什么?