问题
I am making a simple time in and time out system.. i have 3 pairs of in and outs. p_id(person_id)
TableA
p_id time_id status timestamp
1 1 in 2013-12-18 15:44:09
2 2 in 2013-12-18 16:23:19
1 3 out 2013-12-18 18:31:11
1 4 in 2013-12-18 18:50:11
3 5 out 2013-12-18 19:20:16
1 6 out 2013-12-18 19:50:11
2 7 out 2013-12-18 19:51:19
1 8 in 2013-12-19 07:51:19
1 9 out 2013-12-19 12:00:19
1 10 in 2013-12-19 01:00:19
1 11 out 2013-12-19 05:30:19
1 12 in 2013-12-19 07:51:19
1 13 out 2013-12-19 11:00:19
Into Table Result one row for the same date
id status timestamp status timestamp status timestamp status timestamp status timestamp status timestamp
1 in 2013-12-18 15:44:09 out 2013-12-18 18:31:11 in 2013-12-18 18:50:11 out 2013-12-18 19:50:11
2 in 2013-12-18 16:23:19 out 2013-12-18 19:51:19
3 out 2013-12-18 19:20:16
1 in 2013-12-19 07:51:19 out 2013-12-19 12:00:19 in 2013-12-19 01:00:19 out 2013-12-19 05:30:19 in 2013-12-19 07:51:19 out 2013-12-19 11:00:19
回答1:
I guess you want something like this:
SELECT a1.id, a.1status, a1.timestamp, a2.status, a2.timetstamp
FROM timetable a1
LEFT JOIN timetable a2 ON a2.id=a1.id AND a2.status = 'out'
WHERE a1.status = 'in'
To have a row with only an out-value doesn't make any sense to me.
回答2:
try this query,
select t1.id,t2.status as IN_Status,t2.timestamp as IN_Time,t3.status as OUT_Stats,t3.timestamp as OUT_Time
from table1 t1
left join table1 t2 on (t1.id=t2.id and t2.status ='in')
left join table1 t3 on (t1.id=t3.id and t3.status ='out')
group by t1.id;
Check the example
SQL Fiddle Example
来源:https://stackoverflow.com/questions/20653309/convert-selected-column-values-to-another-row-using-select-with-the-same-id-part