2 deallyge deallyge 于 2014.11.22 14:17 提问

在oracle当中统计连续迟到次数

在oracle签到表中
假设 1 是正常上班 2是迟到 3是请假 4是旷工
员工A 自上班以来的签到情况 是(按时间 desc) 222431...
现在需要统计他最近连续 迟到的次数 (请假、旷工不算迟到)
问:怎样编写 sql 才能统计出 他最近连续迟到3次?
也可以这样问 怎样编写 sql 才能统计出 他最近连续 非正常上班 次数?

3个回答

bw555
bw555   Ds   Rxr 2014.11.22 20:22

签到是怎么存储的?
姓名 日期 状态?按这个结构给你写吧
--下面语句可查出设定日期之后连续3天迟到的人员名单
--listagg 11g以后可用
select 姓名
from T
where 日期>=设定日期
GROUP BY 姓名
having regexp_like(listagg(状态,'') within group (order by 日期),'222')

lzp_lrp
lzp_lrp   Ds   Rxr 2014.11.24 08:45

一个sql语句比较难写,建议用存储过程来实现,通过游标,比较简单也容易理解

beier9737
beier9737   2014.12.10 17:09

select 姓名,wm_concat(状态) type1 from 表 group by 姓名
这件可以把所有状态拼在一起,然后你在统计222的个数

Csdn user default icon
上传中...
上传图片
插入图片