SQL 比较具有重复 ID 的行和 Return 具有最低序列号的行

SQL Compare Rows With Duplicate IDs and Return One With Lowest Sequence Number

寻求帮助。我已经看到很多关于如何使用 DUPLICATE 的答案,但并不是我所需要的。假设我的查询结果如下所示。

query result

  Incident_No   Open_Approval_Step      Approval_ID     
 ------------- -------------------- ------------------- 
            1                    3   Tech               
            1                    4   Cust_Serv          
            2                    1   Incident_Recorder  
            2                    2   Estimation         
            2                    3   Tech               
            3                    4   Cust_Serv          
            3                    5   Mgmt               
            3                    6   Closure            

我需要为每个事件编号一行,其中编号最小的批准步骤。所以结果应该是这样的。

filtered query result

  Incident_No   Open_Approval_Step      Approval_ID     
 ------------- -------------------- ------------------- 
            1                    3   Tech               
            2                    1   Incident_Recorder  
            3                    4   Cust_Serv          

编辑这是我最后想出来的

SELECT DISTINCT

MIN(OPEN_APPROVAL_STEP) OVER(PARTITION BY INCIDENT_NO ORDER BY OPEN_APPROVAL_STEP ASC) AS CUR_APP_STEP,

INCIDENT_NO

FROM T

您可以使用 row_number():

select *
from (
    select 
        t.*,
        row_number() over(partition by incident_no order by open_approval_step) rn
    from mytable t
) t
where rn = 1

除了事件编号和批准步骤之外只有一个额外的列,另一种选择是聚合和 Oracle 的 keep 语法:

select 
    incident_no,
    min(open_approval_step) open_approval_step,
    min(approval_id) keep(dense_rank first order by open_approval_step) approval_id
from mytable
group by incident_no    

如果只有三列,可以轻松使用聚合:

select incident_no, min(open_approval_step),
       min(approval_id) keep (dense_rank first order by open_approval_step) 
from t
group by incident_no;