mysql 查询邻近的两条记录并合并成一条

该方法虽然可以实现,但是效率特别低

现有一个签到表,需要查出每个人的每次签到和签出时间

t_sign表结构和数据如下
id user type time
1 A in 2016-10-10 09:00:00
2 B in 2016-10-10 09:05:00
3 B out 2016-10-10 10:00:00
5 A out 2016-10-10 11:27:00
6 A in 2016-10-10 13:57:00
8 B in 2016-10-10 16:08:00
9 A out 2016-10-10 17:45:00
10 A in 2016-10-10 18:01:00
11 B out 2016-10-10 18:02:00


希望查询结果
user in_time out_time
A 2016-10-10 09:00:00 2016-10-10 11:27:00
A 2016-10-10 13:57:00 2016-10-10 17:45:00
A 2016-10-10 18:01:00 NULL
B 2016-10-10 09:05:00 2016-10-10 10:00:00
B 2016-10-10 16:08:00 2016-10-10 18:02:00


SQL:

[sql]  view plain  copy
 print ?
  1. select usertime as in_time,  
  2. (select time from t_sign where user=s.user and type='out' and time > s.time order by time limit 1) out_time  
  3. from t_sign s where type = 'in' order by usertime  

你可能感兴趣的:(mysql 查询邻近的两条记录并合并成一条)