MySQL重新排序列表表

时间:2017-07-06 02:56:36

标签: mysql mysql-workbench

在MySQL工作台中,我有一个以下格式的列表:

ID  | type | order | time
----|------|-------|----------
id1 |  1   |  1    | 2017-1-1
id1 |  2   |  2    | 2017-1-2
id1 |  1   |  3    | 2017-1-4
id1 |  2   |  4    | 2017-1-5
id2 |  1   |  1    | 2017-1-1
id2 |  2   |  2    | 2017-1-9
id3 |  1   |  1    | 2017-1-1
id3 |  2   |  2    | 2017-1-2
id3 |  1   |  3    | 2017-1-9
id3 |  2   |  4    | 2017-1-11
id3 |  1   |  5    | 2017-1-13
id3 |  2   |  6    | 2017-1-18

我想重新排序表以提供以下输出:

ID  |  time(1)  | time(2)
----|-----------|-----------
id1 | 2017-1-1  | 2017-1-2
id1 | 2017-1-4  | 2017-1-5 
id2 | 2017-1-1  | 2017-1-9
id3 | 2017-1-1  | 2017-1-2
id3 | 2017-1-9  | 2017-1-11
id3 | 2017-1-13 | 2017-1-18

我有上述解决方案,但在50万个条目表中获取结果似乎需要很长时间。我想知道是否有人可以提供我可以尝试的上述问题的解决方案。

感谢您的帮助,Luca

1 个答案:

答案 0 :(得分:0)

select t1.ID, t1.time as 'time(1)', t2.time as 'time(2)'
from Table1 t1 join Table1 t2
on t1.ID=t2.ID and t1.type=1 and t2.type=2
and t1.order=t2.order-1 and t2.order%2=0;

|  ID |   time(1) |   time(2) |
|-----|-----------|-----------|
| id1 |  2017-1-1 |  2017-1-2 |
| id1 |  2017-1-4 |  2017-1-5 |
| id2 |  2017-1-1 |  2017-1-9 |
| id3 |  2017-1-1 |  2017-1-2 |
| id3 |  2017-1-9 | 2017-1-11 |
| id3 | 2017-1-13 | 2017-1-18 |