2017-10-06 3 views
1

나는 JOOQ에 다음 PostgreSQL의 쿼리를 공식화하려고 : JOOQ 윈도우 파티션 ORDER 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 명령 후, 나는 JOOQ에서 더 이상 사용하는 DESC 옵션이 없습니다. rangeFollowing 또는 rowsCurrentRow과 같은 명령이 있고 desc()과 같은 상속 된 명령은 필요한 후속 명령을 더 이상 호출 할 수없는 SortField 개체를 반환합니다.

JOOQ에서 원하는 SQL 쿼리를 창 함수에서 DESC 순서로 공식화하는 방법이 있습니까?

답변

0

쓰기이 :

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

내가 윈도우 함수 호출의 orderBy() 절에 결과 SortField을 통과하기 위해 열 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