![](/img/trans.png)
[英]IF clause in 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.