天天看點

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 user, time 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 user, time