Sql 在oracle中,当前月份状态为空时,如何获取前几个月的最大记录
我需要拉状态,当本月为空时,检查上个月状态不为空,排名应该为1。 如果排名1的前一个月的状态中也有空值,则从中查找前一个月 对于下面的场景,我需要调出3月份的数据,因为它的状态为排名1 我试过下面的方法,但没有得到预期的结果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 ,
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。会有什么结果?你能摆好小提琴吗?