博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle处理考勤时间,拆分考勤时间段的sql语句
阅读量:5319 次
发布时间:2019-06-14

本文共 963 字,大约阅读时间需要 3 分钟。

最近一直在用mysql数据库做云项目,有段时间没有接触oracle了,昨天有朋友叫我帮忙用oracle处理一个考勤记录的需求,我在考虑如何尽量精简实现上面花了一些时间。于是把这个实现做个总结。

需求如下:

  1. rownum为奇数的为进厂时间,偶数的为离场时间
  2. 第一个奇数行的时间被第一个偶数行相减,以此类推
  3. 将上面两步产生的时间结果集相加得出总时间作为当天考勤时间

最终能和别的表联合起来形成这样的展示:

 

人员

日期

工时

入厂时间

出厂时间

张三

2015/6/18

9小时30分钟

8:00:00

10:30:00

11:00:00

12:30:00

13:30:00

17:30:00

18:00:00

18:30:00

19:00:00

19:30:00

20:00:00

20:30:00

李四

..

..

 要我实现的是如何把时间一列的数据拆分成为两列来显示:

原来一列是这样的:

 

要实现的拆分的效果是这样的:

实现方式如下:

首先创建一个时间表(当然这里我关注的只是scan_time这个字段,其他字段不用理会):

create table CMIS_PERSON_FI_DETAIL_TB(  detail_id    NUMBER(20) not null,  scan_time    DATE,  person_fk_id NUMBER(20) not null)

其次,插入数据,插入数据之后的效果是这样的:

最后编写sql进行实现,实现的sql语句如下所示:

select max(a) in_time, max(b) out_time  from (select decode(mod(rownum, 2), 1, scan_time) a,               decode(mod(rownum, 2), 0, scan_time) b,               round(rownum / 2) c          from CMIS_PERSON_FI_DETAIL_TB) group by c order by c;

运行sql,得到了想要的效果,如下所示:

转载于:https://www.cnblogs.com/longshiyVip/p/4590956.html

你可能感兴趣的文章
arcgis api 4.x for js 结合 Echarts4 实现散点图效果(附源码下载)
查看>>
YTU 2625: B 构造函数和析构函数
查看>>
apache自带压力测试工具ab的使用及解析
查看>>
C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
查看>>
jenkins搭建
查看>>
C#中使用Split分隔字符串的技巧
查看>>
加固linux
查看>>
IPSP问题
查看>>
10.17动手动脑
查看>>
WPF中Image显示本地图片
查看>>
Windows Phone 7你不知道的8件事
查看>>
实用拜占庭容错算法PBFT
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
nodejs vs python
查看>>