내가 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)
을 가지고있다.
내 목표는 직원이 내 생성 시리즈에서 매일 그룹화 된 작업 시간을 얻는 것입니다. 이 조인은 어떻게 수행합니까? 테이블에 startdate
및 enddate
열에 대한 직접 액세스 권한이 없음에 유의하십시오. 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
테이블에 할당합니다.이 테이블은 하루에 해당 작업에서 근무하는 시간입니다.
"taskresults"의 정의는 무엇입니까? –
테이블 정의 및 일부 설명을 사용하여 내 게시물을 업데이트했습니다. – nephix
나머지는 어떻게 서로 잘 어울리는 지, 정확히 어떤 문제인지, 또는 이러한 마법의 getstartdate 및 getenddate 함수가 의도 한 바를 해결할 수 없습니다. . –