Java JOOQ窗口分区顺序说明
我尝试将以下PostgreSQL查询公式化为JOOQ:Java JOOQ窗口分区顺序说明,java,postgresql,jooq,Java,Postgresql,Jooq,我尝试将以下PostgreSQL查询公式化为JOOQ: SELECT * FROM (SELECT *, row_number() OVER (PARTITION BY propertyid ORDER BY validfrom DESC) AS rownum FROM propertyvalue WHERE validfrom <= '1978-01-01T00:00:00Z') X WHERE rownum = 1; 在orderBy命令之后,我在JOOQ中
SELECT * FROM
(SELECT *, row_number() OVER (PARTITION BY propertyid ORDER BY validfrom DESC)
AS rownum FROM propertyvalue WHERE validfrom <= '1978-01-01T00:00:00Z') X
WHERE rownum = 1;
在orderBy命令之后,我在JOOQ中不再使用DESC选项。只有像rangeFollowing
或rowscrentrow
这样的命令,以及像desc()
这样的继承命令,它返回一个SortField对象,我无法再调用所需的后续命令
那么,在JOOQ中,有没有办法在窗口函数中用DESC order来表达我想要的SQL查询呢
DSL.rowNumber()
.超过()
.partitionBy(PROPERTYVALUE.propertyid)
.orderBy(PROPERTYVALUE.validfrom.desc())
请注意,我在validfrom
列上调用了desc()
,以便将结果SortField
传递给窗口函数调用的orderBy()
子句
您试图做的是按窗口函数表达式排序,例如在SELECT
语句的orderby
子句中。例如:
选择*
从属性值
哪里有效
ctx.select(PROPERTYALUE.fields(), DSL.rowNumber().over().
partitionBy(PROPERTYVALUE.propertyid).orderBy(PROPERTYVALUE.validfrom).???)