使用具有相同 id 的选择将选定的列值转换为另一行


Convert selected column values to another row using select with the same id

我正在制作一个简单的时间输入和超时系统.. 我有 3 对进出。 p_id(person_id)

表A

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

如何在表结果中选择表格(同一日期的一行,右侧的进出对根据time_id升序)? 请检查这个简单的例子,也许你有一个想法。 http://www.sqlfiddle.com/#!2/6dd1f/8

p_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
我认为你会

得到最好的,使用纯SQL是这样的(未经测试,但你明白了):

SELECT p_id, GROUP_CONCAT(CONCAT(status, " ", timestamp)) inout
FROM TableA
GROUP BY p_id, DATE(timestamp)

我不知道如何解决,但我知道您正在寻找的是一个枢轴:阅读更多关于:http://en.wikibooks.org/wiki/MySQL/Pivot_table