該方法雖然可以實作,但是效率特别低
現有一個簽到表,需要查出每個人的每次簽到和簽出時間
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 ?
- select user, time as in_time,
- (select time from t_sign where user=s.user and type='out' and time > s.time order by time limit 1) out_time
- from t_sign s where type = 'in' order by user, time