做了一个分页,按照取样时间排序。
Select * from (select ROWNUM RN,X.* from ( select s.* from T_TEST_SAMPLE s <where> <if test="qualityName!=null and qualityName!=''"> AND TRIM(s.sample_name) = #{qualityName,jdbcType=VARCHAR} </if> <if test="begin!=null "> and SAMPLING_DATE >= #{begin,jdbcType=TIMESTAMP} </if> <if test="end!=null "> AND SAMPLING_DATE <= #{end,jdbcType=TIMESTAMP} </if> </where> order by s.SAMPLING_DATE desc ) X where ROWNUM <= #{endIndex,jdbcType=INTEGER} ) Z where RN > #{offset,jdbcType=INTEGER}
最近,业务流程改变了,取样时间存在相等的情况了。
后来,查询好几天的信息,就出现了一种情况。第三页的最后两条出现在了第四页的最前两条。
后来想了一下,估计是因为取样时间相等的数据过多,导致排序乱了,就用了一个不可能重复的字段排序。
order by s.SAMPLING_DATE desc,id desc
这下情况正常了~
这篇文章讲的非常好:
ORACLE中order by造成分页不正确原因分析 - LXQLCCC - 博客园