MySQL 使用前一行 ID 按多列排序
MySQL Sorting by multiple columns with previous row ID
我有一组看起来像这样的行:
我需要对这些行进行排序,首先基于 "SequenceNo"。然后基于"PreviousID"。这样最终的结果应该是这样的(最后两行应该交换):
我进行了广泛的搜索,但无法真正找到适合这种情况的内容。
非常感谢任何帮助。
谢谢!
您可以尝试自连接和排序
drop table if exists t;
create table t(id int,seqno int, previous_id int);
insert into t values (201,1,0),(204,1,201), (202,2,203),(203,2,204);
select t.id,t.seqno,t.previous_id , t1.id,t1.seqno,t1.previous_id
from t
left join t t1 on t1.id = t.previous_id
order by t1.seqno,t1.id;
+------+-------+-------------+------+-------+-------------+
| id | seqno | previous_id | id | seqno | previous_id |
+------+-------+-------------+------+-------+-------------+
| 201 | 1 | 0 | NULL | NULL | NULL |
| 204 | 1 | 201 | 201 | 1 | 0 |
| 203 | 2 | 204 | 204 | 1 | 201 |
| 202 | 2 | 203 | 203 | 2 | 204 |
+------+-------+-------------+------+-------+-------------+
4 rows in set (0.00 sec)
我有一组看起来像这样的行:
我需要对这些行进行排序,首先基于 "SequenceNo"。然后基于"PreviousID"。这样最终的结果应该是这样的(最后两行应该交换):
我进行了广泛的搜索,但无法真正找到适合这种情况的内容。 非常感谢任何帮助。
谢谢!
您可以尝试自连接和排序
drop table if exists t;
create table t(id int,seqno int, previous_id int);
insert into t values (201,1,0),(204,1,201), (202,2,203),(203,2,204);
select t.id,t.seqno,t.previous_id , t1.id,t1.seqno,t1.previous_id
from t
left join t t1 on t1.id = t.previous_id
order by t1.seqno,t1.id;
+------+-------+-------------+------+-------+-------------+
| id | seqno | previous_id | id | seqno | previous_id |
+------+-------+-------------+------+-------+-------------+
| 201 | 1 | 0 | NULL | NULL | NULL |
| 204 | 1 | 201 | 201 | 1 | 0 |
| 203 | 2 | 204 | 204 | 1 | 201 |
| 202 | 2 | 203 | 203 | 2 | 204 |
+------+-------+-------------+------+-------+-------------+
4 rows in set (0.00 sec)