-
Oracle 排序问题求解5
在项目中遇到一个问题,逻辑如下:
每一个ID能从数据库中搜出对应两条记录,并按记录的时间进行rank,代码中按时间先后顺序依次处理每条记录,生成输出文件。
问题是,在开发环境和预生产环境中处理记录的顺序都正常,但是到生产环境中有些记录正常,有些错误。日志显示错误记录在处理时顺序有问题,即先处理了时间在后的记录。百思不得其解,难道在生产环境中搜出的记录随机进行了排序?
简化的SQL语句是这样的:
select uID ,field1,field2, DENSE_RANK () OVER (PARTITION BY uID ORDER BY CREATED_DATE) RNKfrom users
order by uID
排序时只按了uID来排,没有再按RNK 排,如果只按uID排,那么其他字段是随机排列的么,如果是,那么为什么在本地测试N多次都不能重放这个错误呢?
问题补充:<div class="quote_title">missoasis 写道</div><div class="quote_div">我的理解是只按uID排序,除非uID相同,才会按RNK排序,不过,uID好像不会相同啊,也就是说你这句SQL首先会按照uID排序,不会管CREATED_DATE是前还是后,如果你本地不能重放这个错误,你看一下是不是uID已经排序了,你可以改一下uID来测试一下,不知道我理解的对不对</div> <br />谢谢你的回复,uID是不会相同,但是在结果集里面每一个uID有两条记录,这两条记录的created_date不一样,uID是已经排序了的,需要的是对同一个uID的两条记录还需要按created_date再排
问题补充:<div class="quote_title">jiewo 写道</div><div class="quote_div">为什么不这样写了<pre name="code" class="sql">select uID ,field1,field2, DENSE_RANK () OVER (PARTITION BY uID ORDER BY CREATED_DATE) RNK
from users
order by uID,DENSE_RANK () OVER (PARTITION BY uID ORDER BY CREATED_DATE)[/align] </pre></div> <br />非常感谢,我想你的意思是写成: <br /><pre name="code" class="sql">select uID ,field1,field2, DENSE_RANK () OVER (PARTITION BY uID ORDER BY CREATED_DATE) RNK
from users
order by uID, RNK </pre>, <br />我们现在也考虑到了这样改,但是问题是如果对同一个uID不按RNK再排序的话,那么这一个uID的两条记录内部是随机排序的么,如果是,为什么在开发环境测试的时候没有出现随机的情况,而总是同一个顺序呢?
问题补充:<div class="quote_title">missoasis 写道</div><div class="quote_div">测试与生产环境一样吗?例如操作系统不同有可能导致这种问题,默认的安装规则好像不一样的</div> <br />环境搭建都一样,但是oracle和操作系统的配置应该还是有差别,你的意思是会不会是oracle的某个session变量影响排序结果?2010年4月07日 11:38
5个答案 按时间排序 按投票排序
-
引用环境搭建都一样,但是oracle和操作系统的配置应该还是有差别,你的意思是会不会是oracle的某个session变量影响排序结果?
不敢肯定,我也觉得可能是这样,一般对某个字段排序都是通过order by限定死2010年4月07日 15:16
-
在Oracle里,不指定ORDER BY的话,顺序是不被保证的,
不同的环境下,默认顺序很有可能不一样,也就会有不同的结果。
所以还是要指定ORDER BY的。2010年4月07日 14:26
-
为什么不这样写了
select uID ,field1,field2, DENSE_RANK () OVER (PARTITION BY uID ORDER BY CREATED_DATE) RNK from users order by uID,DENSE_RANK () OVER (PARTITION BY uID ORDER BY CREATED_DATE)[align=left][/align]
2010年4月07日 12:49
-
我的理解是只按uID排序,除非uID相同,才会按RNK排序,不过,uID好像不会相同啊,也就是说你这句SQL首先会按照uID排序,不会管CREATED_DATE是前还是后,如果你本地不能重放这个错误,你看一下是不是uID已经排序了,你可以改一下uID来测试一下,不知道我理解的对不对
2010年4月07日 12:14
相关推荐
在IT行业中,问题求解是一项核心技能,尤其是在编程领域。本案例中,我们关注的是一个与图书搜索和图形定位相关的任务,使用的编程语言是Java。Java作为一种广泛应用的面向对象的编程语言,拥有丰富的库和框架,能...
最近几年,他专注于研究Oracle内部原理以及解决性能问题。他的博客主页是 kerryosborne.oracle-guy.com。 ROBYN SANDS 思科公司的软件工程师,为思科的客户设计开发嵌入式Oracle数据库产品。从1996年开始使用...
- 如何为具有ASO公式的数据表添加求解顺序列; - 如何添加和填充排序顺序列; - 如何添加用于不同属性的表; - 如何确定关系表中的层次结构; - 如何使用Essbase大纲提取器提取维度; - 如何使用Star Analytics从...
"GetBest.java"和"Cross.java"是这次比赛的题目解决方案,它们可能涉及了算法设计、数据结构和问题求解策略。 1. **GetBest.java**:这个文件名暗示可能是一个寻找最佳或最优解的程序。在编程竞赛中,这通常涉及到...
1. **动态规划概念**:通过将大问题分解为子问题,存储和重用子问题的解,以求解原问题。 2. **经典动态规划问题**:包括最长公共子序列、最长上升子序列、背包问题等。 3. **树形DP**:处理与树结构有关的动态规划...
- 求解最小树形图问题通常有两种方法:`O(N^3)`和`O(VE)`。 - 该问题通常出现在通信网络的设计中,如建立最小成本的通信网络。 #### 五、几何算法 1. **几何模板**: - 提供了计算点、线、多边形等基本几何对象...
2. 动态规划:在解决复杂问题时,利用数据结构如数组或链表存储中间状态,可以实现动态规划求解问题。 3. 算法设计:数据结构是算法设计的基础,如图的最短路径算法(Dijkstra、Floyd)、树的遍历(深度优先搜索、...
47. Factor Oracle问题 以上就是ACM算法试题集和答案所包含的丰富知识点。这些内容几乎涵盖了ACM算法竞赛中可能遇到的所有问题类型和解题方法。掌握这些内容对于提升编程能力、解决复杂算法问题以及准备ACM算法竞赛...
高级阶段的练习题可以是设计一个高效的算法来解决特定的优化问题,或者对某个NP完全问题进行近似求解。 ### HTML5应用现状与前景 HTML5是最新一代的超文本标记语言,它是开放网络平台的核心标准,用于构建和呈现...
递归则是复杂问题求解的一种策略,通过函数自身调用来解决特定问题,如计算阶乘、遍历树结构等。 5. **第06章:异常处理** Java的异常处理机制提供了对程序错误的处理方式,学习者将学习try-catch-finally语句块的...
动态规划是一种将复杂问题分解成子问题来求解的方法,常用于优化问题。 5. 树形结构算法:如二叉搜索树、AVL树、红黑树等,这些数据结构在数据库索引、搜索和平衡操作中扮演重要角色。 6. 链表操作:如单链表、双...
4. **方程求解**:通过三重循环,尝试寻找满足特定条件的x、y、z值,解决了一个线性方程组问题。 以上就是从给定文件信息中提炼出的关于“数据库原理与技术”以及VFP编程的知识点总结。希望这能帮助你更深入地理解...
Java是一种面向对象的编程语言,由Sun Microsystems公司(现已被Oracle公司收购)在1995年发布。它的设计目标是“一次编写,到处运行”,这意味着开发者只需编写一次代码,就可以在各种平台上运行,而无需重新编译。...
5. **动态规划**:动态规划是一种解决问题的方法,通过构建状态转移方程来逐步求解最优化问题。 6. **字符串处理**:Java的String类提供了丰富的字符串操作方法,如substring、indexOf、replace等,对字符串的处理...
4. **动态规划**:动态规划是一种用于求解最优化问题的方法,通过将大问题分解为小问题并存储中间结果来避免重复计算,如背包问题、最长公共子序列等。 5. **贪心算法**:对于具有局部最优解的问题,贪心策略往往能...
- 这些计算任务可能涵盖基础算术到更复杂的数学问题,例如简单的加减乘除、分数运算、几何问题、代数方程求解等。 - 每个任务可能都有特定的输入和输出格式,通过用户输入进行计算,然后显示结果。 5. **GUI...
7. 数学算法:如大整数运算、模运算、矩阵运算等,这些在加密算法和数学问题求解中很常见。 8. 回溯法和分支限界法:常用于解决组合优化问题,如八皇后问题、旅行商问题等。 9. 分治策略:如快速幂运算、Strassen...
此外,图论算法如Dijkstra算法、Floyd-Warshall算法、Prim算法和Kruskal算法可用于求解最短路径问题和最小生成树问题。 数据结构与算法的结合是提升程序效率的关键。例如,二叉树和堆可以用来实现优先队列,哈希表...
4. 分治策略:将大问题拆分为小问题进行求解,然后组合小问题的答案得到大问题的解。快速排序和归并排序是分治策略的典型例子。 5. 图论算法:在处理网络或关系问题时,如最短路径问题(Dijkstra算法或Floyd-...
算法方面,排序问题如快速排序、归并排序、堆排序等在LeetCode中很常见。搜索问题包括二分查找、回溯法、动态规划等。动态规划是一种优化技术,常用于解决最优化问题,如最长公共子序列、背包问题等。 总的来说,...