SQL 按顺序排列行块

SQL Arrange blocks of rows in Order By

假设我有一个看起来像这样的原始输出(完全按 StartTime 排序):

Name OrderNo OpNo StartTime Length
A 17345 op10 27/4/22 08:00 04:00:00
B 12727 op 20 27/4/22 11:00 02:00:00
A 18001 op10 27/4/22 13:20 01:00:00
B 17345 op 20 28/4/22 10:17 06:00:00
B 18001 op 20 29/4/22 13:00 04:00:00
C 17345 op 30 3/5/22 16:20 08:00:00
C 18001 op 30 5/5/22 13:00 09:00:00

如何按 OrderNo,然后按 OpNo,然后按每个 OrderNo 中最低 OpNo 的 StartTime 对行进行排序?所以它看起来像这样:

Name OrderNo OpNo StartTime Length
A 17345 op10 27/4/22 08:00 04:00:00
B 17345 op 20 28/4/22 10:17 06:00:00
C 17345 op 30 3/5/22 16:20 08:00:00
B 12727 op 20 27/4/22 11:00 02:00:00
A 18001 op10 27/4/22 13:20 01:00:00
B 18001 op 20 29/4/22 13:00 04:00:00
C 18001 op 30 5/5/22 13:00 09:00:00

我知道按 OrderNo、OpNo 进行排序很容易,可以将行排序到每个 OrderNo 的 'blocks' 中,并带有 asc(或 desc)OpNo。但是我遇到的问题是如何通过每个 'blocks'?

中最低 OpNo 的 StartTime 对每个 'blocks' 进行排序

希望我说得有道理?

使用first_value

select *
from (
    select *, first_value(StartTime) over(partition by OrderNo order by OpNo) blockStart    
    from mytable
) t
order by blockStart, OrderNo, OpNo