2012-09-22 4 views
4

이것은 정확히 Getting date list in a range in PostgreSQL과 비슷하지만 정확하게 같지는 않습니다 (제 생각 엔).Postgres SQL : 테이블에 시작 날짜와 종료 날짜 열이있는 날짜 당 하나의 결과 얻기

모든 행에 시작 및 종료 날짜가있는 SQL 테이블이 있습니다. 각 행에 대해이 범위 내의 각 날짜에 대해 하나의 결과를 얻을 수 있도록 쿼리를 구성하고 싶습니다. 예를 들어

: id=1, title=MyRange, start=2012-08-05, end=2012-08-08

검색어 : SELECT * FROM myTyble where id=1 AND ...

결과 :

id=1, title=MyRange, date=2012-08-05 
id=1, title=MyRange, date=2012-08-06 
id=1, title=MyRange, date=2012-08-07 
id=1, title=MyRange, date=2012-08-08 

나는 독특하고 기본 키 행이 결과 집합에 중복됩니다 실현,하지만 그건 문제가되지 않습니다 나를. 어떤 아이디어라도 대단히 환영 할 것입니다!

답변

5

당신이 선택한만큼 쉽게 generate_series에 가입 할 수 있습니다. 이런 식으로 뭔가 트릭을 수행해야합니다

select t.* 
from generate_series('2010-01-01'::timestamp, '2013-01-01'::timestamp, '1 day') as s(d) 
join your_table t on (s.d between t.start and t.end) 

당신은 당신이 2010-01-01 물론 2013-01-01 원하는 대신 실제 날짜를 제공 할 것입니다. 0을 조정, 이전과

select t.* 
from generate_series(0, 1096) dt(d) 
join your_table t on ('2010-01-01'::date + dt.d between t.start and t.end) 

:

이전 버전의 같은 8.3, 초기 일로부터 일 오프셋을 생산하는 generate_series를 사용하여 당신이 가짜 수있는 타임 스탬프와 함께 작동하는 generate_series을 가지고 있지만하지 않습니다 사용자의 데이터와 일치하도록 1096'2010-01-01'을 말하십시오.

+0

이것은 깔끔하게 보입니다 (나는 벤치 마크해야합니다.)하지만 PostgreSQL 8.3 설치에'generate_series'를 사용하면 오류가 발생합니다. 추가 옵션, 확장 또는 라이브러리가 필요합니까? "오류 : 함수 generate_series (시간대없이 시간 소인, 시간대없이 시간 소인, 간격)이 없습니다. 힌트 : 주어진 이름 및 인수 유형과 일치하는 함수가 없습니다. 명시 적 유형 캐스트를 추가해야 할 수도 있습니다." – Jens

+0

@Jens : 8.3의 [generate_series'] (http://www.postgresql.org/docs/8.3/interactive/functions-srf.html#FUNCTIONS-SRF-SERIES)에는 타임 스탬프 버전이 없지만 내 업데이 트 에서처럼 그것을 가짜 수 있습니다. –

관련 문제