如何在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月有一天,所以在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,'yyyymm')

假设您每天要花费8个小时,