sql - 查询根据时间间隔计算总和
问题描述
任务包含 start_time、date_time 和工作负载(以 % 为单位)。
在给定的时间,员工最多可以 100% 地完成多项任务。这是一个示例,其中三个任务重叠(可能有四个、五个……):
考虑到每个时间间隔,计算的百分比将是:76、101、50 和 25。
我编写了一个算法,获取输入中的任务列表并输出值,但想看看直接从数据库中检索总和是否更有效。问题是,我找不到正确的查询。
任何想法的开发人员?谢谢 :)
解决方案
您必须提取所有不同的时期,然后总结
;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
推荐阅读
- python - 降低阶梯式问题的时间复杂度(亚马逊面试问题)
- c++ - 遇到 CUDA 非法内存访问
- testing - 如何使用 TestCafe 与 ag-Grid 进行交互
- javascript - 想要更改 div.main1 中的文本,但内部文本不起作用
- python-3.x - Pygame:将数据适合屏幕宽度和高度
- cognos - 无法使用 Cognos Mash-up 服务在 Cognos 报表中获取折线图和条形图的数据?
- c++ - 使用“!!”的目的是什么 在 if 语句中
- python - 解析生成的文件 Python
- amazon-web-services - 如何在 Route53 中耗尽 CNAME 记录?
- magento - 以自定义表单自动填写注册数据 Magento 2 前端