sql - Oracle数据库 - 如何有条件地从结果中选择两行中的一行
问题描述
我在 Oracle 表中有以下数据:
Date Amount Flag
12/09/2018 0:00 191 1
12/09/2018 0:00 190 0
13/09/2018 0:00 187 0
14/09/2018 0:00 200 1
14/09/2018 0:00 201 0
我想检索所有标志为 0 的记录,如果存在标志为 1 的重复行,则应优先考虑。所以上表的最终结果应该是这样的:
Date Amount Flag
12/09/2018 0:00 191 1
13/09/2018 0:00 187 0
14/09/2018 0:00 200 1
解决方案
这是一个选项:
SQL> with test (cdate, amount, flag) as
2 (select date '2018-09-12', 191, 1 from dual union all
3 select date '2018-09-12', 190, 0 from dual union all
4 select date '2018-09-13', 187, 0 from dual union all
5 select date '2018-09-14', 200, 1 from dual union all
6 select date '2018-09-14', 201, 0 from dual
7 )
8 select cdate, amount, flag
9 from (select cdate, amount, flag,
10 row_number() over (partition by cdate order by flag desc) rn
11 from test
12 )
13 where rn = 1;
CDATE AMOUNT FLAG
---------- ---------- ----------
12/09/2018 191 1
13/09/2018 187 0
14/09/2018 200 1
SQL>
推荐阅读
- angular - 基于模板引用将焦点设置在输入上
- php - 使用 php 对新关键字没有强制的链式方法能力
- linux-kernel - GFP_KERNEL 与 GFP_DMA 和 kmalloc() 与 dma_alloc_coherent()
- java - 安卓; 执行方法时如何显示按钮
- xcode - xcode 8 无法在 macOS 10.14 上打开
- android - 如何在android的编辑文本中显示错误消息?
- sql - Oracle SQL:向日期添加小时数
- perl - 如何在bash中分隔一列的字段?
- neo4j - Neo4J 桌面版:数据库无法重新启动:数据库 [database-f6b0d9de-9954-4197-955c-ceb200b57d92] 'v3.4.7' 退出,状态为 'KILLED'
- c++ - 带有函数指针的 C++ 运算符优先级