id name  dm  hmq   hmz  time
3  wang  01  0001  0025 2010-01-01
4  wang  01  0001  0025 2010-01-02
8  wang  01  0002  0024 2010-01-03
10 wang  06  0020  0050 2010-01-01
11 wang  06  0021  0050 2010-01-10
15 li    01  0001  0025 2010-05-04
18 li    01  0001  0025 2010-05-05
19 zhao  02  0075  0085 2010-04-03根据姓名name,代码dm,号码段(号码起始hmq,号码截至hmz)分组,但是同样的姓名name,代码dm,号码段有可能包含在上一条记录中,只要求查询得到每个人每种代码的最新的一条记录就可以了
也就是下面的结果
8  wang  01  0002  0024 2010-01-03
11 wang  06  0020  0050 2010-01-10
18 li    01  0001  0025 2010-05-05
19 zhao  02  0075  0085 2010-04-03

解决方案 »

  1.   

    select id,name,dm,hmq ,max(time) from table
    group id,name,dm,hmq;
      

  2.   

    select id,name,dm,hmz,max(time) from table
    group id,name,dm,hmz;
      

  3.   

    select id, name, dm, hmq, hmz, time
      from (select max(id) keep(dense_rank last order by hmq, time) over(partition by name, dm) as rn,
                   test.*
              from test)
     where rn = id
     order by id
      

  4.   

     select * from tt1 where time in (select max(time) from tt1 group by name||dm);
      

  5.   

    select *
      from (select t.*,
                   row_number() over(partition by t.name, t.dm order by t.time desc) rn
              from test1 t)
     where rn = 1