SQL每日一题08:查询员工考勤时间

61 阅读2分钟

题目

从一张考勤表T20191109中找出员工每天的上班,下班打卡的具体时间? 考勤表中相关字段如下:ID,NAME,NO,TIME

其中ID是主键,NAME为员工姓名,NO为工号,TIME为打卡时间 返回的结果如下:

参考答案

create table T20191109
(
ID int ,
Name varchar(20),
Number int,
Time varchar(50)
);
insert into T20191109 values
(1,'张三',1001,'2019-11-09 08:22:27');
insert into T20191109 values
(1,'李四',1002,'2019-11-09 08:08:52');
insert into T20191109 values
(1,'张三',1001,'2019-11-09 12:13:16');
insert into T20191109 values
(1,'李四',1002,'2019-11-09 18:09:22');
insert into T20191109 values
(1,'王五',1003,'2019-11-09 08:22:27');
insert into T20191109 values
(1,'张三',1001,'2019-11-09 18:31:14');

--SQL Server解法
select 
convert(varchar(10),T.Time,112) as '日期',
T.Name as '姓名',
MIN(T.Time) as '上班时间',
MAX(T.Time) as '下班时间'
from T20191109 T
group by 
convert(varchar(10),T.Time,112),T.Name

--MySQL解法
select 
date_format(t.time,'%Y-%m-%d') as '日期',
t.name as '姓名',
min(t.time) as '上班时间',
max(t.time) as '下班时间'
from T20191109 t
group by 
date_format(t.time,'%Y-%m-%d'),t.name

答案解析

根据题意我们只需要求出每个员工每天的上下班时间即可,而员工的上下班时间可以通过每天打卡的最小值(MIN())和最大值(MAX())来判定。

Convert是SQL Server中的格式转换函数,通常将字符转换成指定的日期格式,转换日期时与Mysql的date_format()类似