sql - 如何根据 SQL 中的开始和结束日期聚合年月级别的度量?
问题描述
我有一个 SQL 查询,它包含如下三列
employee_id start_date end_date hours
123 09-01-2019 09-02-2019 8
123 09-28-2019 10-01-2019 32
我想重写查询,而不是细化,我只想知道员工在年月级别上的总和(小时),如下所示:
employee_id Year_Month hours
123 201909 32
123 201910 8
员工在 9 月有 4 天,因此 4*8=32,在 10 月有 1 天,因此 10 月有 8 小时。我的问题是相邻月份之间有交叉的开始日期和结束日期。我不确定如何编写查询来获得我想要的输出,我非常感谢任何帮助
解决方案
使用递归查询在每个月生成一系列天,然后按月聚合并计数可能会更简单:
with
data as (< your existing query here >),
cte (employee_id, dt, max_dt) as (
select employee_id, start_date, end_date from data
union all
select employee_id, dt + 1, max_dt from cte where dt + 1 < max_dt
)
select employee_id, to_char(dt, 'yyyymm') year_months, count(*) * 8 hours
from mytable
group by employee_id, to_char(dt, 'yyyymm')
如您的问题所述,这假设每天 8 小时。
推荐阅读
- duplicates - OpenRefine:如何为列中的每个输入创建唯一的行(用逗号稀释)
- java - 从 Android Room 中检索双精度值导致 NullPointerExcpetion
- javascript - 未捕获的 ReferenceError:导入 OrbitControls 和 OBJLoader 时未定义三个
- javascript - 使用 for 循环将元素推入数组的函数;在 console.log 中显示预期数组时返回空数组
- azure-api-management - Azure APIM 新开发人员门户无法正常工作
- python - 如何检查numpy中数组的值?
- c++ - 同一文件夹中的文件都包含同一文件夹中但文件夹名称在前的文件
- javascript - 如何更改材质UI React js中占位符的颜色
- url - 使用长 url 的谷歌表格中的 URL 缩短器
- r - 如何在ggplot中为x变量填充和标签名称使用单独的列?