sql - 如何根据上一行的值对sql结果进行排序?

标签 sql sorting sql-order-by

我正在尝试按结果集列中的值对 SQL 数据选择进行排序。数据如下:

(此数据排序不正确,仅作为示例)

ID      projectID   testName                                objectBefore    objectAfter
=======================================================================================
13147   280         CDM-710 Generic TP-0000120 TOC~~@~~     -1              13148
1145    280         3.2 Quadrature/Carrier Null 25 Deg C    4940            1146
1146    280         3.2 Quadrature/Carrier Null 0 Deg C     1145            1147
1147    280         3.3 External Frequency Reference        1146            1148
1148    280         3.4 Phase Noise 50 Deg C                1147            1149
1149    280         3.4 Phase Noise 25 Deg C                1148            1150
1150    280         3.4 Phase Noise 0 Deg C                 1149            1151
1151    280         3.5 Output Spurious 50 Deg C            1150            1152
1152    280         3.5 Output Spurious 25 Deg C            1151            1153
1153    280         3.5 Output Spurious 0 Deg C             1152            1154
............
18196   280         IP Regression Suite                     18195           -1

数据的顺序基于 objectBefore 和 objectAfter 列。第一行始终是当 objectBefore = -1 时,最后一行将是当 objectAfter = -1 时。在上面的示例中,第二行的 ID 为 13148,因为这就是第 1 行 objectAfter 所等于的内容。有没有办法编写一个以这种方式对数据进行排序的查询?

最佳答案

这实际上是对链表进行排序:

WITH SortedList (Id, objectBefore , projectID, testName, Level)
AS
(
  SELECT Id, objectBefore , projectID, testName, 0 as Level
    FROM YourTable
   WHERE objectBefore = -1
  UNION ALL
  SELECT ll.Id, ll.objectBefore , ll.projectID, ll.testName, Level+1 as Level
    FROM YourTable ll
   INNER JOIN SortedList as s
      ON ll.objectBefore = s.Id
)

SELECT Id, objectBefore , projectID, testName
  FROM SortedList
 ORDER BY Level

您可以在 this post 中找到更多详细信息

关于sql - 如何根据上一行的值对sql结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435215/

相关文章:

php - 当 PHP 中的数据库没有任何内容可获取时如何显示错误

MySQL:使用分组依据和最大限制进行计数

sql - 我的 vba 代码设计为使用输出参数从存储过程(在 SQL 中)返回一个值,但我无法获得要返回的值

python - 如何找到组内值之间的最小差异

java - JPA manytomany 在使用@JoinTable 时保持列表顺序

mysql - 对有序子查询中的第一个结果进行分组

mysql - 弹性和关系数据库

mysql - 对表进行排序,在 MySQL 中使用循环与 SELECT 和 UPDATE

javascript - 按数组内容排序

asp.net-mvc - Entity Framework Include OrderBy随机生成重复数据