sql - 如何修复“使用 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
解决方案
使用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”时,您将获得该行。我认为这是您的逻辑所暗示的。
推荐阅读
- timestamp - Googlescript逐行更新时间戳
- autohotkey - 按随机时间范围?
- ios - UICollectionView - 部分快照 - 删除部分或项目时“找不到项目索引”
- machine-learning - 人工神经网络中实际输出值过冲/下冲的一般趋势
- c# - Unity上firebase的序列化错误
- java - 在tomcat中将子域托管到域根目录
- r - 如何在应用滚动功能的情况下显示缺失的日期
- ios - 有没有办法在 SwiftUI 中创建一个新的手势?
- awk - 在特定的行范围内按多个模式删除行
- scala - 我应该如何在 scala 中实现“添加”解释器?