如何根据案例表达式中的条件更新行

roo*_*kie 2 sql oracle

我在SQL查询中有一个CASE表达式.我想基于案例表达式创建一个新列作为排名,并仅更新具有登录最大日期的行.

select A.*,
  CASE          
    WHEN A.COUNT = 1        
    THEN 'rank1'  
    -- I want to give the condition here saying update the row
    -- which has the latest login date with 'rank1' .. now it is
    -- updating all the row which has count as 1
    else 'rank2' end as Rank 
from table A
Run Code Online (Sandbox Code Playgroud)

如何在上面的代码中添加一个条件,只更新计数1和最新登录日期的列与同一注册中的其他行相比?

结束表应如下所示:

count  regID   login        rank
1      221      10 april 16     rank1
1      221      9 april 16      rank2
1      221      8 april 16      rank2
1      366      8 march 16      rank2
1      366      1 feb 16        rank2
1      366      22 april 16     rank1
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

我想你正在寻找row_number():

select A.*,
       (case when a.count = 1 and
                  row_number() over (partition by a.count, regid order by login desc) = 1
             then 'rank1'
             else 'rank2'
        end) as rank
from table A;
Run Code Online (Sandbox Code Playgroud)