私は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
を使用して各タスクの日付範囲にのみアクセスできます。このテーブルは基本的に、従業員をテーブルからテーブルに割り当て、1日あたりそのタスクで作業している時間数を示します。getstartdate
getenddate
employeetasks
employees
task