PostgreSQL访问generate_series()单元格



我通过PostgreSQL的generate_series(min, max)以以下方式生成一个日期序列:

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

CCD_ 2和CCD_ 3各自返回给定任务的开始日期和结束日期。我有更多的表Employees(employeeid, taskid, worktime)Tasks(taskid, startdate, enddate)

我的目标是从我生成的系列中,让员工每天的工作时间分组。如何执行此联接?注意,我不能直接访问表Tasks中的列startdateenddate,我只能通过上述函数访问日期。工作时间以小时/天为单位,因此我必须通过SUM()为员工工作到该系列中给定日期的每项任务聚合工作时间。问题是我不知道如何访问生成的序列中的日期。

EDIT
数据结构:

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表中的员工分配他们每天在该任务中工作的小时数。

您可以像其他任何操作一样对生成的系列执行JOIN

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

如果不知道数据是如何存储的,很难计算出联接条件。

此外,您的数据结构也很奇怪。员工有"taskid"?n: 1名员工->任务?我真的不能写一个完整的查询,因为我没有得到数据结构。

相关内容

  • 没有找到相关文章

最新更新