select *
  from (select t0.*,
               row_number() OVER(order by t0.decTime desc) as RowNumber
          from (SELECT distinct q.*
                  from (SELECT p.SEQ_NO as seqNo,
                               p.LIST_NO as listNo,
                               p.GOODS_NO as goodsNo,
                               p.CODE_TS as codeTs,                 
                               to_char(p.UPDATE_TIME, 'yyyy-mm-dd HH:mm:ss') as updateTime,
                               to_char(p.DEC_TIME, 'yyyy-mm-dd') as decTime
                          FROM (SELECT *
                                  FROM PRE_GOODS_LIST
                                Union All
                                SELECT * FROM CUR_GOODS_LIST) p
                         WHERE p.SEQ_NO = '99212236-1b10-4cb4-bf01-37ba7c360201'
                         order by updatetime desc) q) t0) t
 where t.RowNumber between 1 and 15

解决方案 »

  1.   

    用户说数据前几页进行下一页显示之后,大部分数据都没有变化。经查相关资料后和数据库数据分析之后,发现根据updatetime进行排序,有大部分数据的updatetime都一样,需要在updatetime加入一个业务主键进行进一步的排序操作可解决上述问题。后来又发现不加入业务主键进行排序,去掉语句中的distinct关键字后,第一页和第二页内容没有重复的数据,加上distinct之后有多达14条数据重复。抱着求知若渴的精神,发了此贴。求解答
      

  2.   

    把union all
    改为
    union 
    试试
      

  3.   

                   row_number() OVER(order by t0.decTime desc) as RowNumber
    得到的数据行是不稳定的,建议你使用一个不重复的列进行排序,或使用 decTime  和其他列联合排序,保证唯一,才能得到稳定的行;
      

  4.   

    不是重复数据,两个表本来是不会重复的。现在是分页,第一页中的数据重复出现到第二页中呢。改为union就不需要加distinct了,union就会自动去重。
      

  5.   


    恩。union all的两张表结构是一样的,数据本来就不会重复,不知道为啥去掉里面的distinct,分页的第一页和第二页中的数据就不会重复出现了,敢问兄台知道原因么
      

  6.   

    首先,to_char 的格式你写错了。应该为:yyyy-mm-dd hh24:mi:ss。
    有可能因为它造成的。
    但,只是有可能。你先试试
      

  7.   

    ToString 的 format的格式,oracle、sqlserver、C#、java里貌似都不同。我以前也经常错,现在每次写都是现查
      

  8.   


    这两张表结构是一样的,这两张表正常的情况下是不会出现重复数据的,您看看为了显示分页,按updateTime排序,这个SQL语句最优的写法该怎么写呢?分页不重复的sql我大致知道怎么解决,但是本人对多重嵌套的SQL感觉有点乱,您刚才说的排序,我也觉得贴上的SQL有部分排序的地方可以去掉,您可以写个优化后的SQL么