就是一个商城平台,想每一页显示 “更多不同卖家” 的商品
比如 A 最近上了 5 个商品,B 最近上了 8 个商品
更早前 C,D,E,F 上架了一个商品
那时间排序第一页就全是 AB 的商品了,这不行

解决方案 »

  1.   

    可以用row_number() over()按照商品分组在按照时间排序,每次可按照row_number取出每个商品的两条数据,这差不多算是对每个商品分页。
      

  2.   

    with a as (
    select 'A' AS U,1 T,sysdate+1 D FROM DUAL UNION ALL
    select 'A' AS U,2,sysdate+2 D FROM DUAL UNION ALL
    select 'A' AS U,3,sysdate+3 D FROM DUAL UNION ALL
    select 'A' AS U,4,sysdate+4 D FROM DUAL UNION ALL
    select 'A' AS U,5,sysdate+5 D FROM DUAL UNION ALL
    select 'B' AS U,1,sysdate+1 D FROM DUAL UNION ALL
    select 'B' AS U,2,sysdate+2 D FROM DUAL UNION ALL
    select 'B' AS U,3,sysdate+3 D FROM DUAL UNION ALL
    select 'B' AS U,4,sysdate+4 D FROM DUAL UNION ALL
    select 'B' AS U,5,sysdate+5 D FROM DUAL UNION ALL
    select 'B' AS U,6,sysdate+6 D FROM DUAL UNION ALL
    select 'B' AS U,7,sysdate+7 D FROM DUAL UNION ALL
    select 'B' AS U,8,sysdate+8 D FROM DUAL UNION ALL
    select 'C' AS U,1,sysdate D FROM DUAL UNION ALL
    select 'D' AS U,1,sysdate D FROM DUAL UNION ALL
    select 'E' AS U,1,sysdate D FROM DUAL UNION ALL
    select 'F' AS U,1,sysdate D FROM DUAL )
    select u,t from a where (select count(*) from a b where b.u = a.u and b.d >a.d) < 2;
      

  3.   

    select * from (
    select a.name,row_number()over(partition by a.name order by a.上架时间 desc nulls last) rn from a
    order by a.上架时间 desc nulls last
     ) a where a.rn<3