首页 > 解决方案 > 如何修复“使用 SQL 中的条件选择行”

问题描述

我想根据变量选择我的结果中的一些行。我想要所有的客户,变量'FLG_NEW_RM'=0 的所有行和'FLG_NEW_RM'=1 的第一行。示例:我尝试使用 sql 中的 row_number 函数来解决这个问题。但我什么也没得到

我的代码:

SELECT A.*
,ROW_FROM TABLE ANUMBER() OVER (PARTITION BY CLT,FLG_NEW_RM ORDER BY MONTH_NEXT,FLG_NEW_RM DESC ) AS ID
FROM TABLE A

实际结果 :

CLT MONTH_NEXT  FLG_NEW_RM  ID
C1  01/11/2016  0           1
C1  01/12/2016  0           2
C1  01/01/2017  0           3
C1  01/02/2017  0           4
C1  01/03/2017  1           1
C1  01/04/2017  1           2
C1  01/05/2017  1           3
C2  01/11/2016  0           1
C2  01/12/2016  0           2
C2  01/07/2017  1           1
C2  01/08/2017  1           2
C2  01/09/2017  1           3

预期成绩

CLT MONTH_NEXT  FLG_NEW_RM
C1  01/11/2016  0
C1  01/12/2016  0
C1  01/01/2017  0
C1  01/02/2017  0
C1  01/03/2017  1
C2  01/11/2016  0
C2  01/12/2016  0
C2  01/07/2017  1

标签: sqlr

解决方案


使用lag()

select a.*
from (select a.*,
             lag(FLG_NEW_RM) over (partition by clt order by month_next) as prev_fnr
      from a
     ) a
where FLG_NEW_RM = 0 or prev_fnr = 0 or prev_fnr is null;

我添加了最后一个条件,因此当组的第一行为“1”时,您将获得该行。我认为这是您的逻辑所暗示的。


推荐阅读