问题描述
- 在oracle当中统计连续迟到次数
-
在oracle签到表中
假设 1 是正常上班 2是迟到 3是请假 4是旷工
员工A 自上班以来的签到情况 是(按时间 desc) 222431...
现在需要统计他最近连续 迟到的次数 (请假、旷工不算迟到)
问:怎样编写 sql 才能统计出 他最近连续迟到3次?
也可以这样问 怎样编写 sql 才能统计出 他最近连续 非正常上班 次数?
解决方案
签到是怎么存储的?
姓名 日期 状态?按这个结构给你写吧
--下面语句可查出设定日期之后连续3天迟到的人员名单
--listagg 11g以后可用
select 姓名
from T
where 日期>=设定日期
GROUP BY 姓名
having regexp_like(listagg(状态,'') within group (order by 日期),'222')
解决方案二:
一个sql语句比较难写,建议用存储过程来实现,通过游标,比较简单也容易理解
解决方案三:
select 姓名,wm_concat(状态) type1 from 表 group by 姓名
这件可以把所有状态拼在一起,然后你在统计222的个数
时间: 2024-11-08 21:55:30