簡體   English   中英

使用 ROW_NUMBER () OVER(PARTITION BY... ORDER BY) 更新語句

[英]Update Statement with ROW_NUMBER () OVER(PARTITION BY… ORDER BY)

我正在嘗試使用 ROW_NUMBER () OVER(PARTITION BY... ORDER BY) 編寫更新語句

這是我的表的示例:

ROW_NO   ENTITY_ID   ENTITY_NAME   EFF_DATE     INSURANCE_CO   SCENARIO_ID   
1        352725      ABC COMPANY   10/20/2000   999            NULL
2        352732      ABC COMPANY   7/1/2002     888            NULL
3        352736      ABC COMPANY   8/6/2004     999            NULL
4        865867      ABC COMPANY   10/16/2007   888            NULL

我使用 ROW_NUMBER() OVER(PARTITION BY ENTITY_NAME ORDER BY EFF_DATE ASC) 'ROW_NO' 來獲得 ROW_NO

我想做的是設置 SCENARIO_ID = 1 其中 INSURANCE_CO = 999 的前一行。

以下是我試圖達到的結果:

ROW_NO   ENTITY_ID   ENTITY_NAME   EFF_DATE     INSURANCE_CO   SCENARIO_ID   
1        352725      ABC COMPANY   10/20/2000   999            NULL
2        352732      ABC COMPANY   7/1/2002     888            1
3        352736      ABC COMPANY   8/6/2004     999            NULL
4        865867      ABC COMPANY   10/16/2007   888            1

我很感激幫助。

如果您嘗試根據以前的記錄進行更新,則領導 function 將提供幫助,而不是 row_number

SELECT LEAD( 1) OVER (
        PARTITION BY ENTITY_NAME  ,INSURANCE_CO
        ORDER BY EFF_DATE
    ) ,*
    FROM Table_name 
    ORDER BY  ROW_NO  

使用 LAG() window function:

WITH cte AS (
  SELECT *, LAG(INSURANCE_CO) OVER(PARTITION BY ENTITY_NAME ORDER BY EFF_DATE ASC) prev
  FROM tablename
)
UPDATE cte
SET SCENARIO_ID = 1
WHERE prev = '999'

請參閱演示
結果:

> ROW_NO | ENTITY_ID | ENTITY_NAME | EFF_DATE                | INSURANCE_CO | SCENARIO_ID
> -----: | --------: | :---------- | :---------------------- | -----------: | :----------
>      1 |    352725 | ABC COMPANY | 2000-10-20 00:00:00.000 |          999 | null       
>      2 |    352732 | ABC COMPANY | 2002-07-01 00:00:00.000 |          888 | 1          
>      3 |    352736 | ABC COMPANY | 2004-08-06 00:00:00.000 |          999 | null       
>      4 |    865867 | ABC COMPANY | 2007-10-16 00:00:00.000 |          888 | 1 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM