题目
从一张考勤表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()类似