2017-10-06 50 views
1

我嘗試寫出下面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中使用了。只是有命令,如rangeFollowingrowsCurrentRow和類似desc()繼承的命令,它返回的SortField對象上,我不敢說我​​需要後續命令了。

那麼,有沒有在JOOQ任何方式來制定我期望的SQL查詢與窗函數的倒序?

回答

0

這樣寫:

DSL.rowNumber() 
    .over() 
    .partitionBy(PROPERTYVALUE.propertyid) 
    .orderBy(PROPERTYVALUE.validfrom.desc())) 

觀察的事實,我爲了得到的SortField傳遞到窗口函數調用的orderBy()條款呼籲列validfromdesc()

你想做些什麼本來由窗口函數表達式,如訂購在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