微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在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月有一天,所以在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个小时,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。