2012-06-11 4 views
2

PostgreSQL 데이터베이스에 날짜와 가격 열이있는 테이블이 있습니다. ('transdate'및 'price')1 년 이상 된 기간에 매주 한 행을 선택할 수 있습니까?

나는 1 년 이상 기간에 걸쳐 매주 한 행을 선택하는 쿼리를 작성하고자합니다. 내가 50보다 큰 주 간격을 연장 할 때

;with cte as 
( 
    select *, 
    row_number() over (partition by Extract (week from transdate) order by transdate desc) as rn 
    from "tablename" where transdate between '06-01-1999' and '06-01-1999'::timestamp + `'50 week'::interval 
) 
select transdate, price from cte where rn = 1 order by transdate; 

그러나, 여전히 단지를 선택 : 여기에 또 다른 질문/답변에서

, 나는 년 미만의 날짜 범위 작동이 코드를 구현 최대 12 개월.

범위 내에서 매주 하나의 날짜/가격을 선택하려면 어떻게해야합니까?

답변

1

문제는 주 번호가 연도 경계에서 랩되지만 주 번호 을 동시에보고 싶다는 것입니다. 운좋게도 여러 가지 일을 한 번에 분할 할 수 있습니다.

row_number() over (
    partition by extract(week from transdate), 
       extract(year from transdate) 
    order by transdate desc 
) as rn 
+0

예! 그거야. 나는 추출물 (일주일 transdata) + 추출물 (일년 transdate에서) 그것이 숫자에 효과가 있다고 생각했지만 노력하지 않았다. –

+0

@ JohnSmith : 'week + year'의 문제점은 '1 + 2012'과 '2 + 2011'이 같은 것으로, 별도로 보관해야하는 사항이 혼합되어 있다는 것입니다. –