2012-10-12 3 views
1

Je suis générer une série de dates via generate_series(min, max) de PostgreSQL de la manière suivante:cellules accès PostgreSQL à generate_series()

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

getstartdate() et getenddate() sont chacun retour la date de début et de fin d'une tâche donnée. J'ai plus de tables Employees(employeeid, taskid, worktime) et Tasks(taskid, startdate, enddate).

Mon objectif est de faire en sorte que le temps de travail des employés soit groupé chaque jour de ma série générée. Comment puis-je effectuer cette jointure? Notez que je n'ai pas accès direct aux colonnes startdate et enddate dans le tableau Tasks Je ne peux accéder aux dates que via les fonctions mentionnées ci-dessus. Le temps de travail est en heures/jour, donc je dois l'agréger via SUM() pour chaque tâche que l'employé travaille à la date donnée dans la série. Le problème est que je ne sais pas comment accéder à une date dans la série générée.

EDIT
Structures de données:

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, 
) 

Quelques explications:
La base de données entière est pour la simulation afin d'abord vous définissez un calendrier des tâches (dans le tableau tasks), puis exécutez la simulation qui insère les résultats en taskresults. Comme vous pouvez le voir, je ne stocke que le duration dans les résultats, c'est pourquoi je ne peux accéder aux plages de dates pour chaque tâche qu'avec les fonctions getstartdate/getenddate. La table employeetasks affecte essentiellement les employés de la table employees au tableau task avec une quantité d'heures qu'ils travaillent dans cette tâche par jour.

+0

Quelle est la définition de "taskresults"? –

+0

J'ai mis à jour mon post avec des définitions de tables et quelques explications – nephix

+0

Je n'arrive pas à comprendre comment le reste est censé s'emboîter, quel est exactement le problème que vous rencontrez, ou ce que ces fonctions getstartdate et getenddate magiques sont censées faire . –

Répondre

0

Vous pouvez JOIN sur les séries générées comme toute autre chose.

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

La condition de jointure est difficile à déterminer sans connaître le mode de stockage de vos données.

De plus, votre structure de données est bizarre. Les employés ont un "taskid"? n: 1 employés -> tâche? Je ne peux pas vraiment écrire une requête complète car je n'obtiens pas la structure de données.

+0

Premier message mis à jour avec des définitions de table – nephix

Questions connexes