问题描述
下面是我当前的SQL代码和输出。对于CD等于STG(以黄色突出显示)的连续(或单个)行,我只需要获取EFF_DAYS的总和。
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY TMSP,EFF_DT) RN,Z2.*
FROM (
SELECT CASE WHEN (LAG_CD IS NULL OR LAG_CD NOT IN ('STG')) AND CD IN ('STG')
THEN RANK() OVER (PARTITION BY ID ORDER BY TMSP,EFF_DT)
WHEN CD = LAG_CD AND CD IN ('STG')
THEN RANK() OVER (PARTITION BY ID ORDER BY TMSP,EFF_DT)
WHEN CD = LAG_CD AND CD != LEAD_CD
THEN RANK() OVER (PARTITION BY ID ORDER BY TMSP,EFF_DT)
END AS CASES,Z.* FROM (
SELECT ID,LAG(CD) OVER (PARTITION BY ID ORDER BY TMSP,EFF_DT) AS LAG_CD,LEAD(CD) OVER (PARTITION BY ID ORDER BY TMSP,EFF_DT) AS LEAD_CD,CD,TMSP,EFF_DT,END_EFF_DT,DATEDIFF(day,END_EFF_DT) AS EFF_DAYS
FROM #POSTCHG_ROWS
WHERE ID IN ('ABC123','XYZ789')
) Z
) Z2 ORDER BY TMSP,EFF_DT
我尝试了各种行号和等级的东西,但是我似乎无法正确地理解CASES列。我花了几个小时来查看其他的gap-island sql解决方案,但是没有遇到下面的确切情况。
理想情况下,我的CASES列将如下输出,因此我可以GROUP BY CASES,ID,连续行块的起始TMSP,然后计算:SUM(EFF_DAYS)。
以下是我的目标输出:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)