2012-10-12 2 views
1

내가 PostgreSQL을의 generate_series(min, max) 다음과 같은 방법을 통해 최신 시리즈를 생성하고 있습니다 :PostgreSQL의 액세스() 세포

SELECT 
    generate_series(getstartdate(some arguments) 
        , getenddate(some arguments), interval '1 day') 
FROM taskresults 

getstartdate()getenddate()는 각각 주어진 작업의 시작 -와 종료 날짜를 반환. 나는 더 많은 테이블 Employees(employeeid, taskid, worktime)Tasks(taskid, startdate, enddate)을 가지고있다.

내 목표는 직원이 내 생성 시리즈에서 매일 그룹화 된 작업 시간을 얻는 것입니다. 이 조인은 어떻게 수행합니까? 테이블에 startdateenddate 열에 대한 직접 액세스 권한이 없음에 유의하십시오. Tasks 위에 언급 된 기능을 통해서만 날짜에 액세스 할 수 있습니다. 작업 시간은 시간/일입니다. 따라서 직원이 시리즈의 주어진 날짜까지 작업하는 각 작업에 대해 SUM()을 통해 집계해야합니다. 문제는 생성 된 시리즈에서 날짜에 액세스하는 방법이 없다는 것입니다.

편집
데이터 구조 :

CREATE TABLE employees 
(
    employeeid serial NOT NULL, 
    firstname character varying(32), 
    lastname character varying(32), 
    qualification character varying(32), 
    incomeperhour numeric, 
) 
CREATE TABLE employeetasks 
(
    projectid integer, 
    taskid integer, 
    employeeid integer, 
    hoursperday real, 
) 
CREATE TABLE taskresults 
(
    simulationid integer, 
    taskid integer, 
    duration integer 
) 
CREATE TABLE tasks 
(
    projectid integer NOT NULL, 
    taskname character varying(32), 
    startdate character varying(32), 
    enddate character varying(32), 
    predecessor integer, 
    minduration integer, 
    maxduration integer, 
    taskid integer, 
) 

일부 설명 : 처음에 당신이 (표 tasks에서) 작업 일정을 정의하고 삽입 시뮬레이션을 실행하므로 전체 데이터베이스 시뮬레이션을위한
결과는 taskresults입니다. 보시다시피 나는 duration 만 결과에 저장하므로 getstartdate/getenddate 함수를 사용하여 각 작업의 날짜 범위에만 액세스 할 수 있습니다. 테이블 employeetasks은 기본적으로 employees 테이블의 직원을 task 테이블에 할당합니다.이 테이블은 하루에 해당 작업에서 근무하는 시간입니다.

+0

"taskresults"의 정의는 무엇입니까? –

+0

테이블 정의 및 일부 설명을 사용하여 내 게시물을 업데이트했습니다. – nephix

+0

나머지는 어떻게 서로 잘 어울리는 지, 정확히 어떤 문제인지, 또는 이러한 마법의 getstartdate 및 getenddate 함수가 의도 한 바를 해결할 수 없습니다. . –

답변

0

생성 된 시리즈에서 JOIN을 수행 할 수 있습니다.

INNER JOIN generate_series(getstartdate(some arguments), getenddate(some arguments), interval '1 day') workday ON (...) 

데이터가 저장되는 방법을 모른 채로 조인 조건을 설정하는 것은 어렵습니다.

또한 데이터 구조가 이상합니다. 직원들은 "숙제"를 가지고 있습니까? n : 1 명의 직원 -> 작업? 데이터 구조를 얻지 못하기 때문에 전체 쿼리를 작성할 수 없습니다.

+0

첫 번째 게시는 테이블의 정의와 함께 업데이트 됨 – nephix