问题描述
你好,
我可能会想得太多这个查询,真的很感激你的一些输入/踢裤子。根据每周40小时的工作时间,我每天怎么加班?如果一周还没有完成,但一名员工已经累积了40多个小时,我需要知道每天达到多少。
员工约翰·马登
周日/周六每周总计 = 5小时加班。
这是我到目前为止所拥有的,但似乎无法接近每日加班。
我可能会想得太多这个查询,真的很感激你的一些输入/踢裤子。根据每周40小时的工作时间,我每天怎么加班?如果一周还没有完成,但一名员工已经累积了40多个小时,我需要知道每天达到多少。
员工约翰·马登
EmpID ADate DailyHours RunningTotal DailyOvertime 22 1/08/2018 10 10 0 22 1/09/2018 10 20 0 22 1/10/2018 12 32 0 22 1/11/2018 10 42 2 22 1/12/2018 3 45 3复制
周日/周六每周总计 = 5小时加班。
这是我到目前为止所拥有的,但似乎无法接近每日加班。
select DISTINCT EmpID, ADate, trunc(ADate, 'Day') as WeekStart, sum(ClockedHours) Over(Partition by ADate Order by Emp_Id) as DailyHours, SUM(ClockedHours) OVER(PARTITION BY trunc(ADate, 'Day') ORDER BY Emp_Id, ADate RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as RunningTotal FROM EmpTimecardDetail WHERE Emp_Id in (22) Order by Emp_Id, ADate; create table EmpTimecard( EmpId number(4,0), Ename varchar2(10), ClockedHours number(4,0), ADate date ) insert into EmpTimecard values( 22, 'John', 10, to_date('1-8-2018','dd-mm-yyyy') ) insert into EmpTimecard values( 22, 'John', 10, to_date('1-9-2018','dd-mm-yyyy') ) insert into EmpTimecard values( 22, 'John', 12, to_date('1-10-2018','dd-mm-yyyy') ) insert into EmpTimecard values( 22, 'John', 10, to_date('1-11-2018','dd-mm-yyyy') ) insert into EmpTimecard values( 22, 'John', 3, to_date('1-12-2018','dd-mm-yyyy') )复制
专家解答
您当然打算使用MM-DD-YYYY格式添加这些日期吗?
无论如何,如果运行总数超过40,您需要做的就是从运行总数中减去40。否则返回零:
无论如何,如果运行总数超过40,您需要做的就是从运行总数中减去40。否则返回零:
create table EmpTimecard( EmpId number(4,0), Ename varchar2(10), ClockedHours number(4,0), ADate date ); insert into EmpTimecard values( 22, 'John', 10, to_date('1-8-2018','mm-dd-yyyy') ); insert into EmpTimecard values( 22, 'John', 10, to_date('1-9-2018','mm-dd-yyyy') ); insert into EmpTimecard values( 22, 'John', 12, to_date('1-10-2018','mm-dd-yyyy') ); insert into EmpTimecard values( 22, 'John', 10, to_date('1-11-2018','mm-dd-yyyy') ); insert into EmpTimecard values( 22, 'John', 3, to_date('1-12-2018','mm-dd-yyyy') ); with rws as ( select EmpID, ADate, trunc(ADate, 'Day') as WeekStart, sum(ClockedHours) Over(Partition by ADate, EmpId) as DailyHours, SUM(ClockedHours) OVER(PARTITION BY trunc(ADate, 'Day') ORDER BY EmpId, ADate RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as RunningTotal FROM EmpTimecard WHERE EmpId in (22) ) select r.*, case when runningtotal > 40 then runningtotal - 40 else 0 end dailyovertime from rws r Order by EmpId, ADate; EMPID ADATE WEEKSTART DAILYHOURS RUNNINGTOTAL DAILYOVERTIME 22 08-JAN-2018 00:00:00 08-JAN-2018 00:00:00 10 10 0 22 09-JAN-2018 00:00:00 08-JAN-2018 00:00:00 10 20 0 22 10-JAN-2018 00:00:00 08-JAN-2018 00:00:00 12 32 0 22 11-JAN-2018 00:00:00 08-JAN-2018 00:00:00 10 42 2 22 12-JAN-2018 00:00:00 08-JAN-2018 00:00:00 3 45 5复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
504次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
484次阅读
2025-04-15 17:24:06
墨天轮个人数说知识点合集
JiekeXu
405次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
398次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
375次阅读
2025-04-01 11:08:44
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
361次阅读
2025-04-18 14:18:38
Oracle 19c RAC更换IP实战,运维必看!
szrsu
343次阅读
2025-04-08 23:57:08
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
316次阅读
2025-04-15 14:48:05
oracle定时任务常用攻略
virvle
316次阅读
2025-03-25 16:05:19
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
312次阅读
2025-03-24 09:42:53