JOOQ窗口分区次序DESC
问题描述:
我尝试写出下面PostgreSQL的查询到JOOQ:JOOQ窗口分区次序DESC
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;
所以我想写与使用窗口功能,先用内部查询开始嵌套查询的查询。我来到那么远:
ctx.select(PROPERTYALUE.fields(), DSL.rowNumber().over().
partitionBy(PROPERTYVALUE.propertyid).orderBy(PROPERTYVALUE.validfrom).???)
在orderBy命令后,我没有一个DESC选项在JOOQ中使用了。只是有命令,如rangeFollowing
或rowsCurrentRow
和类似desc()
继承的命令,它返回的SortField对象上,我不敢说我需要后续命令了。
那么,有没有在JOOQ任何方式来制定我期望的SQL查询与窗函数的倒序?
答
这样写:
DSL.rowNumber()
.over()
.partitionBy(PROPERTYVALUE.propertyid)
.orderBy(PROPERTYVALUE.validfrom.desc()))
观察的事实,我为了得到的SortField
传递到窗口函数调用的orderBy()
条款呼吁列validfrom
desc()
。
你想做些什么本来由窗口函数表达式,如订购在SELECT
声明的ORDER BY
子句中。例如: -
SELECT *
FROM propertyvalue
WHERE validfrom <= '1978-01-01T00:00:00Z'
ORDER BY row_number() OVER (PARTITION BY propertyid ORDER BY validfrom) DESC