日期范围从多个记录(重叠)的工作日总数

疯狂的

假设有以下记录:

Employee_id, work_start_date, work_end_date

1, 01-jan-2014, 07-jan-2014
1, 03-jan-2014, 12-jan-2014
1, 23-jan-2014, 25-jan-2014
2, 15-jan-2014, 25-jan-2014
2, 07-jan-2014, 15-jan-2014
2, 09-jan-2014, 12-jan-2014

要求是编写一个SQL select语句,该语句将汇总按employee_id分组的工作日,但排除重叠的期间(意味着-仅将它们进行一次计算)。

所需的输出将是:

Employee_id, worked_days

1, 13
2, 18

日期范围内工作日的计算如下:如果work_start_date = 5且work_end_date = 9,则work_days = 4(9-5)。

我可以编写一个pl / sql函数来解决此问题(手动遍历记录并进行计算),但是我确信可以使用SQL来实现,以实现更好的性能。

有人能指出我正确的方向吗?

谢谢!

鳄鱼

这是对类似问题的稍作修改的查询:
计算与重叠的日期范围相关联的值的总和

SELECT "Employee_id",
       SUM( "work_end_date" - "work_start_date" )
FROM(
  SELECT "Employee_id",
         "work_start_date" ,
         lead( "work_start_date" ) 
             over (Partition by "Employee_id"
                  Order by "Employee_id", "work_start_date" ) 
         As "work_end_date"
  FROM (
     SELECT "Employee_id", "work_start_date"
     FROM Table1
     UNION
     SELECT "Employee_id","work_end_date"
     FROM Table1
  ) x
) x
WHERE EXISTS (
   SELECT 1 FROM Table1 t
   WHERE t."work_start_date" > x."work_end_date"
     AND t."work_end_date" > x."work_start_date"
      OR t."work_start_date" = x."work_start_date"
     AND t."work_end_date" =  x."work_end_date"
)
GROUP BY "Employee_id"
;

演示:http : //sqlfiddle.com/#!4/4fcce/2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

日期范围从多个记录(重叠)的工作日总数

来自分类Dev

SQL触发日期范围与工作日

来自分类Dev

从日期范围/日期列表中筛选非工作日

来自分类Dev

基于日期范围的Excel条件格式-仅工作日

来自分类Dev

查找日期范围内的工作日

来自分类Dev

如何在python中获取日期范围内某些特定工作日的列表

来自分类Dev

在日期范围之间添加工作日列的快速方法(Excel-VBA)

来自分类Dev

除自定义工作日外的所有记录的总日期差异

来自分类Dev

从特定日期减去工作日

来自分类Dev

HTML输入类型=日期工作日

来自分类Dev

SQL日期差异工作日

来自分类Dev

雪花:仅在工作日添加日期

来自分类Dev

日期+ 7个工作日

来自分类Dev

使用日期参数计算工作日

来自分类Dev

SQL日期差异工作日

来自分类Dev

HTML输入类型=日期工作日

来自分类Dev

dplyr按工作日汇总日期

来自分类Dev

按工作日更改熊猫日期

来自分类Dev

计算工作日到日期 PHP

来自分类Dev

给定多个工作日作为输入,计算两个日期之间的“实际”天数

来自分类Dev

在SQL中查找日期范围重叠的记录

来自分类Dev

工作日(日期)与当前日期(工作日)比较

来自分类Dev

如何检查当前工作日是否在给定的工作日范围之间?

来自分类Dev

工作日之间的日期时间返回日期

来自分类Dev

在Android中获取工作日和以下日期的日期

来自分类Dev

Python日期时间工作日strftime()vs工作日()

来自分类Dev

根据给定的月份开始工作日查找日期的工作日

来自分类Dev

扩大工作日范围内的指数

来自分类Dev

计算时间范围内的工作日