2012-10-12 115 views
1

我通過PostgreSQL的generate_series(min, max)以下列方式產生棗系列:PostgreSQL的訪問generate_series()細胞

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中的列startdateenddate我只能通過上述功能訪問日期。工作時間以小時/天爲單位,因此我必須通過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 (...) 

如果不知道數據如何存儲,那麼連接條件很難解決。

此外,您的數據結構很奇怪。員工有一個「taskid」? n:1名員工 - >任務?我不能寫一個完整的查詢'因爲我沒有得到數據結構。

+0

第一篇文章更新了表定義 – nephix