- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力获取基于 rownum 的数据。当我执行下面的查询来获取基于 rownum 1 to 4
的结果时,它工作正常。
SELECT ROWNUM TOTAL,MI.* FROM (SELECT USER_ID,CUSTOMER_NAME FROM ELEC_AUTO_MERC
ORDER BY CREATION_DATE DESC ) MI WHERE ROWNUM BETWEEN 1 AND 4;
但是当我执行相同的查询以从 rownum 2 到 4
获取结果时,它不起作用,它不会返回任何内容。
SELECT ROWNUM TOTAL,MI.* FROM (SELECT USER_ID,CUSTOMER_NAME FROM ELEC_AUTO_MERC
ORDER BY CREATION_DATE DESC ) MI WHERE ROWNUM BETWEEN 2 AND 4;
作为一种解决方法,当我再使用一个 SELECT 语句时,它工作正常,但我认为仅对 rownum 多次使用 SELECT 并不是一个好方法。
SELECT * FROM (SELECT ROWNUM TOTAL,MI.* FROM (SELECT USER_ID,CUSTOMER_NAME FROM ELEC_AUTO_MERC
ORDER BY CREATION_DATE DESC ) MI) WHERE TOTAL BETWEEN 2 AND 4;
你能帮我创建优化查询吗?
最佳答案
ROWNUM
很奇怪,因为它可以作为查询中条件的一部分进行评估 - 但如果该行无法通过该过滤器,则 ROWNUM
值它被分配的内容可以再次用于下一行。
这样做的一个重要影响是,如果您使用任何排除 ROWNUM
值 1 的条件,您将永远不会获得匹配项。针对此条件进行测试的第一行将是第 1 行;但随后它将无法通过测试,因此下一行将被视为第 1 行;等等。
所以你的条件ROWNUM BETWEEN 2 AND 4
永远不可能为真。
您找到的解决方法是传统的解决方法。另一种方法是使用分析函数对行进行排名,然后根据排名进行过滤,例如:
SELECT MI.* FROM (
SELECT USER_ID,CUSTOMER_NAME, RANK() OVER (ORDER BY CREATION_DATE DESC) AS the_rank
FROM ELEC_AUTO_MERC
) MI
WHERE the_rank BETWEEN 2 AND 4;
多个分析函数 - RANK、DENSE_RANK 和 ROW_NUMBER - 可用于此目的,并且会产生略有不同的结果,特别是在存在平局的情况下。查看文档。
关于oracle - oracle中rownum之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959404/
我一直在使用高精度时间在控制台中记录我的程序事件。但很快我就注意到程序有时会显示四舍五入到毫秒的时间,有时则不会!它完全偶尔发生,它是相同的代码,未重新编译,未在运行之间编辑: using Syste
首先:该代码被认为是纯粹的乐趣,请在生产中不要做任何类似的事情。在任何环境下编译并执行这段代码后,对于您,您的公司或您的驯鹿造成的任何伤害,我们概不负责。以下代码不安全,不可移植,并且非常危险。被警告
我正在投影图像,然后检查它: 高度是20px。这是正确的。 然后我检查包含 img 的 data-radium 元素,令我惊讶的是: 尽管没有内容,该元素的高度“增长”了两个像素。此外,data-ra
我是一名优秀的程序员,十分优秀!