从一张考勤表tb_cwa中找出员工每天的上班、下班打卡具体时间
考勤表相关字段如下下:ID、NAME、NO、TIME
ID NAME NO TIME
1 zhangsan 1001 2020-01-01 08:34:40
2 lisi 1002 2020-01-01 08:39:29
3 wangwu 1003 2020-01-01 08:44:38
4 zhangsan 1001 2020-01-01 18:24:18
5 lisi 1002 2020-01-01 18:34:28
6 wangwu 1003 2020-01-01 18:54:20
日期 姓名 上班时间 下班时间
2020-01-01 zhangsan 2020-01-01 08:34:40 2020-01-01 18:24:18
2020-01-01 lisi 2020-01-01 08:39:29 2020-01-01 18:34:28
2020-01-01 wangwu 2020-01-01 08:44:38 2020-01-01 18:54:20
解决:
SELECT TIME
,NAME
,MAX(start_time) m
,MAX(end_time) MAX
FROM (SELECT NAME
,date_format(TIME, '%Y-%m-%d') AS TIME
,CASE
WHEN rn = 1 THEN
TIME
END AS 'start_time'
,CASE
WHEN rn = 2 THEN
TIME
END AS 'end_time'
FROM (SELECT *
,row_number() over(PARTITION BY no ORDER BY TIME) AS rn
FROM tb_cwa) a
GROUP BY NAME
,TIME) a
GROUP BY NAME
,TIME
提示:convert转换函数
备注:建表和数据
create table tb_cwa(id int,name varchar(10),no int,time datetime);
insert into tb_cwa values(1,'zhangsan',1001,'2020-01-01 08:34:40');
insert into tb_cwa values(2,'lisi',1002,'2020-01-01 08:39:29');
insert into tb_cwa values(3,'wangwu',1003,'2020-01-01 08:44:38');
insert into tb_cwa values(4,'zhangsan',1001,'2020-01-01 18:24:18');
insert into tb_cwa values(5,'lisi',1002,'2020-01-01 18:34:28');
insert into tb_cwa values(6,'wangwu',1003,'2020-01-01 18:54:20');