sql - 在 Oracle SQL 中获取 rownum = 1 但不是 1 的数据
问题描述
得到结果(rownum = 1
):
SELECT rownum,
A.loadplan_name
FROM (SELECT loadplan_name,
run_date
FROM dcbp13_bia_odirepo.citizen_odi_required_loadplans
WHERE run_date LIKE '13-FEB-19'
ORDER BY run_date DESC,
loadplan_name ASC) A
WHERE rownum = 1
没有得到结果(rownum ≠ 1
):
SELECT rownum,
A.loadplan_name
FROM (SELECT loadplan_name,
run_date
FROM dcbp13_bia_odirepo.citizen_odi_required_loadplans
WHERE run_date LIKE '13-FEB-19'
ORDER BY run_date DESC,
loadplan_name ASC) A
WHERE rownum = 2
解决方案
这在文档中进行了解释。 rownum
返回结果集时计算。因此,它仅在将新行放入结果集中时才会增加。
因此,它永远不会在没有值“1”的情况下取值“2”。
如解释:
大于正整数的 ROWNUM 值的条件测试始终为假。例如,此查询不返回任何行:
SELECT * FROM employees WHERE ROWNUM > 1;
提取的第一行被指定为 1 的 ROWNUM 并使条件为假。要获取的第二行现在是第一行,并且还分配了 1 的 ROWNUM 并使条件为假。随后所有行都不满足条件,因此不返回任何行。
解决方案通常是这样的:
SELECT rn, A.LOADPLAN_NAME
FROM (SELECT LOADPLAN_NAME, RUN_DATE, rownum as rn
FROM DCBP13_BIA_ODIREPO.CITIZEN_ODI_REQUIRED_LOADPLANS
WHERE RUN_DATE like '13-FEB-19'
ORDER BY RUN_DATE DESC, LOADPLAN_NAME ASC
) A
WHERE rn = 2;
推荐阅读
- python - Pandas 数据框 .dropna() 没有丢弃 NaN 值
- vue.js - 从子组件调用方法
- javascript - array.push 似乎替换了以前的对象而不是追加
- javascript - 使用过滤器功能从另一个对象创建对象
- angular - 如何防止 Angular 服务人员缓存 PDF 文件?
- php - Wordpress Index.php 博客文章
- java - jaxb2-maven-plugin:无法从 WSDL 生成源
- node.js - 第一个alexa技能
- java - 在两个 ActiveMQ 队列之间配置 Apache Camel 路由,以使用特定目标队列的生产者而不是身份不明的生产者
- android - 使用 BaseAdapter 和 ViewHolder 的空指针异常