数据库·拓展1

本文探讨如何使用SQL查询从考勤表中获取每个员工在给定时间段内的工作时间总数(小时)。在Oracle或PostgreSQL数据库中,通过解析考勤类型和时间戳,确定每个员工的有效签到签退记录,最终计算工作小时数。
摘要由CSDN通过智能技术生成

有一个考勤表,结构如下,(数据库为oracle 或postgresql,下同)
create table t_attendance(
n_id num, -- 考勤编号,关键字,自增
n_user number, -- 用户编号
s_type varchar2(1), --考勤类型 1=上午签到 2=上午签退 3=下午签到 4=下午签退
d_time timestamp, --签到或签退时间
);
员工可能有多次签到,如某个员工,上午签到了两次,则以第一次为准,如果上午签退了两次,
则以第二次为准,下午同样如此。
现给定一个时间段 d_beg 和 d_end ,请用一条sql语句,查询出这个时间段内每为员工的工作时间总数(小时)



select * from t_attendance;
select * from t_attendance where timestamp>=d_beg and timestamp<d_end;


select n_user ,
min(decode(s_type,'1',d_time)) time1,
max(decode(s_type,'2',d_time)) time2,
min(decode(s_type,'3',d_time)) time3,
max(decode(s_type,'4',d_time)) time4,
from t_attendance group by n_user,s_type


with t1 as (
select

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值