Oracle 前 10 条记录选择(带日期排除)
本文解决了常见的 Oracle 数据库挑战:检索按特定列排序的前 10 条记录,同时从另一个表中排除与特定条件匹配的记录。 由于这些元素的相互作用,带有 SELECT DISTINCT
和 ORDER BY
子句的简单 ROWNUM
是不够的。
该解决方案利用子查询来实现所需的结果:
<code class="language-sql">SELECT * FROM ( SELECT DISTINCT APP_ID, NAME, STORAGE_GB, HISTORY_CREATED, TO_CHAR(HISTORY_DATE, 'DD.MM.YYYY') AS HISTORY_DATE FROM HISTORY WHERE STORAGE_GB IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM HISTORY h2 WHERE h2.APP_ID = HISTORY.APP_ID AND TO_CHAR(h2.HISTORY_DATE, 'DD.MM.YYYY') ='06.02.2009' ) ORDER BY STORAGE_GB DESC ) WHERE ROWNUM <= 10;</code>
此方法首先过滤内部查询中的 HISTORY
表。 NOT EXISTS
子句有效地排除 APP_ID
与 HISTORY_DATE
等于“06.02.2009”的记录匹配的记录。 然后结果按 STORAGE_GB
排序(降序)。外部查询应用 ROWNUM <= 10
约束,确保仅返回前 10 条记录。 此方法在过滤和排序之后正确应用行限制,保证准确的结果。
通常比 NOT EXISTS
提供更好的性能,特别是对于大型数据集。 请查阅 Oracle 文档以了解进一步的性能优化策略。NOT IN
以上是如何在排除特定日期的情况下选择前 10 条 Oracle 记录?的详细内容。更多信息请关注PHP中文网其他相关文章!