首页 > 解决方案 > 通过分组更新计数器

问题描述

我有一张桌子T1,看起来像这样

DATUM   ID  NAME    ROW_COUNT

2/14/2021   101 ALEX    
2/14/2021   100 SHAUN   
2/14/2021   102 SCOTT   
2/15/2021   100 SHAUN   
2/15/2021   101 ALEX    
2/15/2021   102 SCOTT   
2/16/2021   100 SHAUN   
2/16/2021   101 ALEX    
2/16/2021   102 SCOTT   

其中有列,,,,我datum想像这样更新计数器IDNameRow_Count

DATUM   ID  NAME    ROW_COUNT

2/14/2021   101 ALEX    1
2/14/2021   100 SHAUN   1
2/14/2021   102 SCOTT   1
2/15/2021   100 SHAUN   2
2/15/2021   101 ALEX    2
2/15/2021   102 SCOTT   2
2/16/2021   100 SHAUN   3
2/16/2021   101 ALEX    3
2/16/2021   102 SCOTT   3

我这样尝试过

UPDATE DAILY_PRODUCTION
SET DOC_ID=DOC_ID+1
GROUP BY DATUM;

但没有工作任何人都知道请。

标签: oracleoracle11goracle10goracle-sqldevelopersqlplus

解决方案


我建议不要进行此更新,而是使用以下 select with DENSE_RANK

SELECT DATUM, ID, NAME, DENSE_RANK() OVER (ORDER BY DATUM) ROW_COUNT
FROM DAILY_PRODUCTION
ORDER BY DATUM, ID;

不想维护该ROW_COUNT列的原因是它可能是派生数据。因此,随着数据的变化,您可能会被迫多次运行此更新。


推荐阅读