一道看似简单的数据库的面试题
建一个如下图的数据库:
巴拉巴拉一顿描述,目的让你求出如下的结果:
解法一:(分组查询,使用max函数)
SELECT
user_id,
max(case status when '上班' then time end) '上班时间',
max(case status when '下班' then time end) '下班时间'
FROM work_time
GROUP BY user_id;
解法二:(表的自连接)
SELECT
DISTINCT w.user_id,w.time as '上班时间',t.time as '下班时间'
FROM work_time w
INNER JOIN work_time t
ON w.user_id = t.user_id
AND w.time<t.time
建表sql语句
CREATE TABLE work_time(
id INT PRIMARY KEY,
time date,
status CHAR(20) ,
user_id INT(20)
)
插入数据:
INSERT INTO
work_time(id,time,status,user_id)
VALUES
('1','2018-07-01','上班','1'),
('2','2018-07-02','下班','1'),
('3','2018-07-03','上班','2'),
('4','2018-07-04','下班','2')