首页 > 解决方案 > 查询根据时间间隔计算总和

问题描述

任务包含 start_time、date_time 和工作负载(以 % 为单位)。
在给定的时间,员工最多可以 100% 地完成多项任务。这是一个示例,其中三个任务重叠(可能有四个、五个……):

在此处输入图像描述

考虑到每个时间间隔,计算的百分比将是:76、101、50 和 25。

我编写了一个算法,获取输入中的任务列表并输出值,但想看看直接从数据库中检索总和是否更有效。问题是,我找不到正确的查询。

任何想法的开发人员?谢谢 :)

标签: sqlpostgresql

解决方案


您必须提取所有不同的时期,然后总结

;with
p0 as (
    select id, task, perc, t_start ts, 1 typ
    from time_periods
    UNION ALL
    select id, task, perc, t_end ts, 0 typ
    from time_periods
),
p1 as (
    select *, Lead(ts, 1) over (order by ts) te
    from p0 
),
p2 as (
    select *
    from p1
    where te is not null and ts<>te
)
select p.ts, p.te, sum(t.perc) perc_tot
from p2 p
join time_periods t on not (t.t_end<=p.ts) and not (t.t_start>=p.te)
group by p.ts, p.te
order by 1

推荐阅读