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

时间:2013-12-06 23:08:31

标签: 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等于。有没有办法编写一个以这种方式排序数据的查询?

1 个答案:

答案 0 :(得分:3)

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

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

中找到更多详情