id name time
1  a   21:00
2  a   05:00
3  b   03:00
4  a   19:00
5  b   18:00order by name,time
但是time需要做个处理,就是00点以后的时候大于00前的查询结果是
4  a   19:00
1  a   21:00
2  a   05:00
5  b   18:00
3  b   03:00有没有人帮忙给个

解决方案 »

  1.   

    order by name,time,变成 order by time desc;
      

  2.   

    这么写应该可以吧
    order by name, decode(sign(12 - time), -1, time, time + 24) 
      

  3.   

    select sst.*,rownum num from (select name,time from '表名' order by time,name) sst order by num asc
      

  4.   


    WITH t AS(
         SELECT 1 AS ID ,'a' AS NAME,'21:00' AS TIME FROM dual UNION ALL
         SELECT 2 AS ID ,'a' AS NAME,'05:00' AS TIME FROM dual UNION ALL
         SELECT 3 AS ID ,'b' AS NAME,'03:00' AS TIME FROM dual UNION ALL
         SELECT 4 AS ID ,'a' AS NAME,'19:00' AS TIME FROM dual UNION ALL
         SELECT 5 AS ID ,'b' AS NAME,'18:00' AS TIME FROM dual 

    SELECT t.* ,CASE WHEN substr(TIME,1,2) < 10 THEN 1 ELSE 2 END AS flag FROM t t ORDER BY NAME,flag DESC,TIME;
      

  5.   

    order by name asc, time desc;
      

  6.   

    SQL> create table tb(id number(18,0), name varchar2(20), time varchar2(20));表已创建。SQL> insert into tb(id,name,time) values(1, 'a', '21:00');已创建 1 行。SQL> insert into tb(id,name,time) values(2, 'a', '05:00');已创建 1 行。SQL> insert into tb(id,name,time) values(3, 'b', '03:00');已创建 1 行。SQL> insert into tb(id,name,time) values(4, 'a', '19:00');已创建 1 行。SQL> insert into tb(id,name,time) values(5, 'b', '18:00');已创建 1 行。SQL> commit;提交完成。SQL> select * from tb
      2  order by name asc, time desc;        ID NAME                                     TIME
    ---------- ---------------------------------------- ----------------------------------------
             1 a                                        21:00
             4 a                                        19:00
             2 a                                        05:00
             5 b                                        18:00
             3 b                                        03:00