问题描述
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个小时,