Sql 在oracle中,当前月份状态为空时,如何获取前几个月的最大记录

Sql 在oracle中,当前月份状态为空时,如何获取前几个月的最大记录,sql,oracle,Sql,Oracle,我需要拉状态,当本月为空时,检查上个月状态不为空,排名应该为1。 如果排名1的前一个月的状态中也有空值,则从中查找前一个月 对于下面的场景,我需要调出3月份的数据,因为它的状态为排名1 我试过下面的方法,但没有得到预期的结果 SELECT CLI.RANK,CLI.SERVICEMONTH,CLI.CLIENTID,CLI.STATUS,CLI.CREATETS FROM (SELECT CLIENTID, SERVICEMONTH, CREATETS, STATUS ,

我需要拉状态,当本月为空时,检查上个月状态不为空,排名应该为1。 如果排名1的前一个月的状态中也有空值,则从中查找前一个月

对于下面的场景,我需要调出3月份的数据,因为它的状态为排名1

我试过下面的方法,但没有得到预期的结果

SELECT CLI.RANK,CLI.SERVICEMONTH,CLI.CLIENTID,CLI.STATUS,CLI.CREATETS         
FROM   (SELECT CLIENTID, SERVICEMONTH, CREATETS, STATUS ,
           Rank ()  OVER ( partition BY SERVICEMONTH  ORDER BY CREATETS DESC) AS RANK              
    FROM   CLIENTTABLE 
    WHERE  CLIENTID = 110011    
    ORDER  BY SERVICEMONTH DESC) CLI
WHERE CLI.RANK=1 AND CLI.STATUS IS NOT NULL 
我需要的结果如下


如果要为每个客户/服务/等级组合输入状态,则可以使用
lag(忽略空值)

如果您希望在没有状态的情况下获得排名为1的最新状态,可以使用:

coalesce(status,
         lag(case when rank = 1 then status end ignore nulls) over (partition by client, service order by servicemonth)
        )
select t.*
from t
where rank = 1 and status is not null and
      clientid = 110011
order by servicemonth desc
fetch first 1 row only;
编辑:

如果您只需要具有状态的
rank=1
最近一行,则可以使用:

coalesce(status,
         lag(case when rank = 1 then status end ignore nulls) over (partition by client, service order by servicemonth)
        )
select t.*
from t
where rank = 1 and status is not null and
      clientid = 110011
order by servicemonth desc
fetch first 1 row only;

编辑您的问题并显示所需的结果。作为请求添加的结果编辑未给出问题中给出的正确预期结果。。。。结果应该是“终止”@nirmal10。会有什么结果?你能摆好小提琴吗?