分页时order by的问题

      做了一个分页,按照取样时间排序。

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 &gt;= #{begin,jdbcType=TIMESTAMP}
                </if>
                <if test="end!=null ">
                    AND SAMPLING_DATE &lt;= #{end,jdbcType=TIMESTAMP}
                </if>
            </where>
            order by s.SAMPLING_DATE desc
        ) X
        where ROWNUM &lt;= #{endIndex,jdbcType=INTEGER}
        ) Z
        where RN &gt; #{offset,jdbcType=INTEGER}

      最近,业务流程改变了,取样时间存在相等的情况了。

      后来,查询好几天的信息,就出现了一种情况。第三页的最后两条出现在了第四页的最前两条。

      后来想了一下,估计是因为取样时间相等的数据过多,导致排序乱了,就用了一个不可能重复的字段排序。

            order by s.SAMPLING_DATE desc,id desc

      这下情况正常了~

      这篇文章讲的非常好:

https://www.cnblogs.com/lwlxqlccc/p/8676045.html

发布了48 篇原创文章 · 获赞 36 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_42845682/article/details/88368648