SQL / postgres带有过滤器的间隔天数

时间:2015-03-12 11:38:50

标签: database postgresql date join views

(我拥有的一切都是postgres,我只能使用数据库内容,没有外部帮助)

我有以下表格:

Project (title, id)
Tasks   (planned_start_date, planned_end_date, contact_id, project_id)
Contact (id, contact_name)

基本上,联系人被分配给任务,每个任务都分配给一个项目。

我必须计算每个联系人为每个项目分配的工作日数。例如:

项目:

  • P1(proj1,1)
  • P2(proj2,2)

任务:

  • T1('12 / 12/12','12 / 14/12',1,1)

  • T2('12 / 12/12','12 / 13/12',1,1)

  • T3('12 / 12/12','12 / 13/12',1,2)

  • T4('12 / 12/12','12 / 13/12',2,1)

  • T5('12 / 12/12','12 / 13/12',2,2)

联系人:

  • C1(1,Jack)
  • C2(2,Carla)

诀窍是我还有一个评估期,它应该作为任务开始/结束日期的过滤器。

enter image description here

因此,我应该以某种方式总结项目的所有指定工作日,仅用于任务在评估期内的时间间隔。

  • 在这个例子中,我们考虑从14日开始的评估时间段 2月1日至19日。
  • 可用的工作日为3 + 5 + 5 + 5 + 5 + 4 = 27天 这个评估时间段。
  • 在这段时间内,某些任务被“削减”以进行评估。这个 表示按比例使用值:
  • 任务1:不予考虑;它在评估时间段之外
  • 任务2:部分考虑。计划结束日期(截止日期) - 计划开始日期= 16天(没有周末)3 + 5 + 1 = 9工作 这个任务2的计划时间是在评估阶段 pte = 6将在这16天内完成,即每人6/16计划的工作量 日(pte ratio)要做(假设平均分配 工作)。在评估期间的9个工作日内,我们有一个 按比例计划的时间为pte = 9 *(6/16)。
  • 任务3:计划时间努力pte = 3
  • 任务4:计划结束日期(截止日期) - 计划开始日期= 11天 (没有周末)5 + 4 = 9个工作日处于评估阶段 对于此任务4.计划的时间努力pte = 4将在此11中完成 天,即每天4/11计划的工作量(完成比例) (假设平等分配工作)。为期9个工作日 在评估期间,我们按比例计划时间 of pte = 9 *(4/11)。

我用过

SELECT count(*) 
FROM generate_series(0, (end_date::date - start_date::date::date)) i
WHERE date_part('dow', start_date::date::date + i) NOT IN (0,6))

只获得间隔的工作日(没有周末),但我不知道如何总结一切并结合所有内容..

任何帮助都会非常棒

0 个答案:

没有答案