下面是使用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
值的连续记录的岛屿。第一个岛,即紧接在Task -ID选择记录之后的记录组,具有grp=0
。如果这部分记录发生也具有Process = 'ulk'
,那么它由上述查询返回,否则不返回任何行。
Demo here
问题中提到的示例需要的输出是什么? –
为什么互联网上已有的过多示例可以帮助您? –
对于复杂的解释感到抱歉。在我的问题中有一个sqlfiddle链接。如果你看看结果,我只需要显示顺序的前两行。 – Rapunzo