使用递归 sql 查询检索邻居数据

Retrieve neighbour data by using recursive sql query

这是我的 table,我保留生产订单的数据。我想通过给@task(例如99537)参数来获取数据,

  1. 获取@task的Loom号 99537 机号为:101
  2. 获取所有后续 "ulk" 进程,直到到达另一个进程任务,按 OrderNo 列排序 "ulk" 进程是 101 织机在 99537 之后的任务是:100127,99829

这是sqlfiddle link

如何为此编写 CTE 查询? 如果 CTE 不可能,任何解决方案也是可能的。

提前致谢..

这是使用 ROW_NUMBER() 的一种方法:

SELECT OrderNo, WeavingLoom, Task, Process
FROM (
SELECT g1.OrderNo, g1.WeavingLoom, g1.Task, g1.Process, 
       ROW_NUMBER() OVER (ORDER BY g1.OrderNo) -
       ROW_NUMBER() OVER (PARTITION BY Process ORDER BY g1.OrderNo) AS grp
FROM GanttTable AS g1
INNER JOIN (SELECT OrderNo, WeavingLoom
            FROM GanttTable
            WHERE Task = 99537) AS g2
ON g1.WeavingLoom = g2.WeavingLoom AND g1.OrderNo > g2.OrderNo) AS t
WHERE grp = 0 AND Process = 'ulk'

grp 字段标识具有相同 Process 值的连续记录的孤岛。第一个岛,即紧跟在 selected-by-TaskID 记录之后的记录组,有 grp=0。如果这条记录恰好也有 Process = 'ulk' 那么上面的查询将返回它,否则不返回任何行。

Demo here