【发布时间】:2012-10-12 09:10:31
【问题描述】:
我通过 PostgreSQL 的 generate_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)。
我的目标是从我生成的系列中按每天对员工的工作时间进行分组。如何执行此连接?请注意,我无法直接访问Tasks 表中的startdate 和enddate 列,我只能通过上面提到的那些函数访问日期。工作时间以小时/天为单位,因此我必须通过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 表,他们每天在该任务中工作的小时数。
【问题讨论】:
-
“任务结果”的定义是什么?
-
我用表格定义和一些解释更新了我的帖子
-
我只是无法弄清楚其余部分应该如何组合在一起,您遇到的问题到底是什么,或者这些神奇的 getstartdate 和 getenddate 函数的目的是什么。
-
任务表存储任务,它们可以定义为 4 种不同的类型(startdate + minmax duration、enddate + minmaxduration、startdate + enddate、previous + minmaxduration)。第三种类型是我可以获得固定开始和结束日期的唯一类型。在其他 3 种情况下,定义任务日期范围的其余列为 NULL。 getstartdate/getenddate 基本上通过 taskresults 中的持续时间构建 avgs/quantiles 来返回日期。我希望这是可以理解的:/
-
我认为您需要将架构简化到最低限度,以说明您需要帮助的问题,摆脱所有无关紧要的复杂性。
标签: postgresql join generate-series