oracle统计一个时间段的考勤

penjamen 2013-07-12 10:04:00
我现在有两张表,一张学生表,一张打卡记录表,打卡记录表记录每天刷卡的学生,我想用纯sql语句实现遍历这个时间段的每一天,统计学生在这一天是否有刷卡记录,如果没有刷卡记录,就认为是缺勤,打印出来,有没有人可以帮帮我,我困扰了两天了,谢谢
...全文
344 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
penjamen 2013-07-13
  • 打赏
  • 举报
回复
引用 3 楼 HJ_daxian 的回复:
with tb as () 当作临时表 就是模拟的你的表 下面的sql还不懂么? (+)连接方式
谢谢,
penjamen 2013-07-12
  • 打赏
  • 举报
回复
我看到有人发了这段sql ,但是又看不懂
with 
  mm as (select to_date(&mon||'01','YYYYMMDD')+ rownum-1 mday from dual connect by rownum <=31),
  yuangong as (select '员工1' yg from dual
               union all
               select '员工2' yg from dual
               union all
               select '员工3' yg from dual
               ),
  kaoqing as (select '员工1' yg,to_date('201001010812', 'YYYYMMDDHH24MISS') tt from dual
               union all
               select '员工1' yg,to_date('201001011612', 'YYYYMMDDHH24MISS') tt from dual
               union all
               select '员工2' yg,to_date('201001020712', 'YYYYMMDDHH24MISS') tt from dual ),
  my   as ( select * from mm,yuangong where to_char(mday,'YYYYMM')= &mon),
  kqs   as (select yg,to_date(to_char(tt,'YYYYMMDD'),'YYYYMMDD')mday,min(tt) mintt,max(tt)maxtt from kaoqing group by yg,to_char(tt,'YYYYMMDD'))
 select my.mday,my.yg, mintt,maxtt,
        case when mintt is null then '未打卡'
             when mintt >my.mday+8/24 and maxtt <my.mday+17/24  then '迟到早退'
             when mintt >my.mday+8/24 then '迟到'
             when maxtt <my.mday+17/24 then '早退'
             else null
        end 
   from my,kqs
  where kqs.mday(+)=my.mday
        and kqs.yg(+)=my.yg
  • 打赏
  • 举报
回复
with tb as () 当作临时表 就是模拟的你的表 下面的sql还不懂么? (+)连接方式
forgetsam 2013-07-12
  • 打赏
  • 举报
回复
能不能看懂和你能不能用有什么关系。 困扰了两天还连个建表语句都不发,看来还是不急。 不发就算了,人家连数据都给你模拟出来了,又说看不懂,找神仙去吧。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧