首页 > 代码库 > 分页问题

分页问题

很长时间没有碰这些常规任务了,妈蛋 劳资一直在写文档~~~~~~~~~~~~

今天手痒,从测试分支上弄了一个代码写了个分页功能,跟开发人员那要了个任务,然后不亦乐乎的写程序,一开始我的分页是这样写的:

SELECT IN_MNO,
       CRD_NO,
       TRAN_CD,
       TRAN_AMT,
       REC_FEE_AMT,
       UUID,
       TRAN_DT,
       TRAN_TM
  FROM PTS.T_PTS_TRANDATA
 WHERE CRD_NO is not null
   and tran_cd in
       (‘10110001‘, ‘10110002‘, ‘10110005‘, ‘10110006‘, ‘10110008‘)
   and in_mno =‘800027844580005‘
   and TRAN_DT >= ‘20141201‘
   and TRAN_DT <= ‘20141231‘
   and rownum > 0
   and rownum <= 20
 order by TRAN_DT desc, TRAN_TM desc;

妄图通过rownum来分页,事实证明这是不可取的;因为

rownum是查询过后才按顺序排的,假如你的条件是rownum>1;那么返回数据的第一条(rownum是1)就不符合要求了,然后第二条数据变成了现在的第一条,结果这一条rownum又变成1了又不符合要求了,以此类推 就没有返回结果。
如果想分页的话 是把rownum作为子表的一个字段(起个别名)。所以分页的时候是没有小于那一说的。fuck


修正后这样的完爆

select *
  from (SELECT A.*,
               ROWNUM RN
          FROM (
          
          SELECT IN_MNO,
                        CRD_NO,
                        TRAN_CD,
                        TRAN_AMT,
                        REC_FEE_AMT,
                        UUID,
                        TRAN_DT,
                        TRAN_TM
                   FROM PTS.T_PTS_TRANDATA
                  WHERE CRD_NO is not null
                    and tran_cd in (‘10110001‘,
                                    ‘10110002‘,
                                    ‘10110005‘,
                                    ‘10110006‘,
                                    ‘10110008‘)
                    and in_mno = ‘800027844580005‘
                    and TRAN_DT >= ‘20141201‘
                    and TRAN_DT <= ‘20141231‘
                  order by TRAN_DT desc, TRAN_TM desc
          
          
          ) A
         WHERE ROWNUM <= 30
         order by TRAN_DT desc, TRAN_TM desc)
 WHERE RN > 20;


分页问题