我通过 PostgreSQLgenerate_series(min, max)
以下列方式生成日期系列:
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
表中,他们每天在该任务中工作的小时数。