逻辑上有矛盾,你没有考虑清楚吧,什么叫先按时间排,再把相同id放一起
万一是
2005-6-8 23:09:09      aaa 
2005-6-8 22:56:39      bbb
2005-6-8 22:45:58      aaa
2005-6-8 23:08:43      bbb
2005-6-8 22:53:46      ccc
2005-6-8 23:01:51      bbb
2005-6-8 22:48:23      ccc
你按时间排了怎么把相同id放一起?如果把相同id放一起就不是按时间排了吧?

解决方案 »

  1.   

    select * from tbname order by ID,InsertTime desc;
      

  2.   

    这个问题挺麻烦的,因为不光光是简单的排序
    我现在只能分2步来做,先按时间来排序,然后把排好序的记录全部读出来,在程序里面做第2步检索的工作,把相同的id归到一起去,挺麻烦的InsertTime             ID  
    2005-6-8 23:09:09      aaa 
    2005-6-8 22:56:39      aaa
    2005-6-8 22:45:58      aaa
    ---------------------------
    2005-6-8 23:08:43      bbb
    2005-6-8 22:53:46      bbb
    ---------------------------
    2005-6-8 23:01:51      ccc
    2005-6-8 22:48:23      ccc如果这时候再插入一条记录
    2005-6-8 23:30:00 ccc的话,结果就是这样
    InsertTime             ID  
    2005-6-8 23:30:00      ccc
    2005-6-8 23:01:51      ccc
    2005-6-8 22:48:23      ccc
    --------------------------
    2005-6-8 23:09:09      aaa 
    2005-6-8 22:56:39      aaa
    2005-6-8 22:45:58      aaa
    ---------------------------
    2005-6-8 23:08:43      bbb
    2005-6-8 22:53:46      bbb
      

  3.   

    楼主说得对,如果直接按楼上的方法排序,会导致如下后果:
    1338688 024  沈阳     辽宁   CDMA
    1338689 024  沈阳     辽宁   CDMA
    1338783 0411 大连     辽宁   CDMA
    1338784 0411 大连     辽宁   CDMA
    1338785 0411 大连     辽宁   CDMA
    1338786 0411 大连     辽宁   CDMA
    1338787 0411 大连     辽宁   CDMA
    1338788 0411 大连     辽宁   CDMA
    1338789 0411 大连     辽宁   CDMA
    1339010 024  沈阳     辽宁   CDMA
    1339011 024  沈阳     辽宁   CDMA
    1339012 024  沈阳     辽宁   CDMA这真是一个很有趣的排序问题!!!
      

  4.   

    SQL> select * from tb;INSERTTIME          ID
    ------------------- ----------
    2005-06-08 23:09:09 aaa
    2005-06-08 22:56:39 aaa
    2005-06-08 22:45:58 aaa
    2005-06-08 23:08:43 bbb
    2005-06-08 22:53:46 bbb
    2005-06-08 23:01:51 ccc
    2005-06-08 22:48:23 ccc已选择7行。已用时间:  00: 00: 00.71
    SQL> select * from tb order by id,inserttime desc;INSERTTIME          ID
    ------------------- ----------
    2005-06-08 23:09:09 aaa
    2005-06-08 22:56:39 aaa
    2005-06-08 22:45:58 aaa
    2005-06-08 23:08:43 bbb
    2005-06-08 22:53:46 bbb
    2005-06-08 23:01:51 ccc
    2005-06-08 22:48:23 ccc已选择7行。已用时间:  00: 00: 00.60
    SQL> insert into tb values(to_date('2005-6-8 23:30:00','yyyy-mm-dd hh24:mi:ss'),'ccc');已创建 1 行。已用时间:  00: 00: 00.20
    SQL> select * from tb order by id,inserttime desc;INSERTTIME          ID
    ------------------- ----------
    2005-06-08 23:09:09 aaa
    2005-06-08 22:56:39 aaa
    2005-06-08 22:45:58 aaa
    2005-06-08 23:08:43 bbb
    2005-06-08 22:53:46 bbb
    2005-06-08 23:30:00 ccc
    2005-06-08 23:01:51 ccc
    2005-06-08 22:48:23 ccc已选择8行。已用时间:  00: 00: 00.70
    SQL> 
    有什么问题?
      

  5.   

    二种普通排序方法的结果:select * from tb_phone_no where city_code<>'NULL' order by phone_no,city_code;
    排序结果见楼上select * from tb_phone_no where city_code<>'NULL' order by city_code,phone_no;
    排序结果如下:1336425 0427 盘锦     辽宁   CDMA
    1336427 0427 盘锦     辽宁   CDMA
    1300928 0429 葫芦岛   辽宁   五环卡
    1300929 0429 葫芦岛   辽宁   五环卡
    1301997 0429 葫芦岛   辽宁   五环卡
    1301998 0429 葫芦岛   辽宁   五环卡
    1301999 0429 葫芦岛   辽宁   五环卡
    1302928 0429 葫芦岛   辽宁   如意通显然不是符合楼主要求的
      

  6.   

    select InsertTime,id from 
    (select InsertTime,id,first_value(InsertTime) over(partition by id order by InsertTime desc) max_time from tab) 
    order by max_time desc,id,InsertTime desc
      

  7.   

    如果ID列还有其它值呢。显示select后insert的方法不是最好
      

  8.   

    搂主是想要对各组id中拥有最大的InsertTime的组排在前面,试试我上面的吧
      

  9.   

    使用游标的方式解决这个问题正合适:SQL> desc tb_phone_no;
    名称                          是否为空?类型
    ------------------------------- -------- ----
     PHONE_NO                        NOT NULL VARCHAR2(7)
     CITY_CODE                       NOT NULL VARCHAR2(4)
     CITY_NAME                       NOT NULL VARCHAR2(8)
     STATE                           NOT NULL VARCHAR2(6)
     TYPE                            NOT NULL VARCHAR2(6)
    DECLARE
    CURSOR cur_orderby IS /*声明游标*/
    SELECT city_code FROM tb_phone_no
    WHERE city_code<>'NULL'
    GROUP BY city_code
    ORDER BY city_code;

    cityCode VARCHAR(10);
    BEGIN
    OPEN cur_orderby; /*打开游标*/

    FETCH cur_orderby INTO cityCode; /*从游标中检索数据行*/
    WHILE cur_orderby%FOUND LOOP
    /*当前面的FETCH语句至少对应于数据库中的一条记录时,%FOUND属性为TRUE*/
    DECLARE
    CURSOR cur_sel IS
    SELECT phone_no FROM tb_phone_no
    WHERE city_code=cityCode
    ORDER BY phone_no;
    phoneNo VARCHAR(11);
    BEGIN
    OPEN cur_sel;
    FETCH cur_sel INTO phoneNo;
    WHILE cur_sel%FOUND LOOP
    DBMS_OUTPUT.PUT_LINE(phoneNo || ' ' || cityCode);
    FETCH cur_sel INTO phoneNo;
    END LOOP;
    CLOSE cur_sel;
    END;
    FETCH cur_orderby INTO cityCode;
    END LOOP;

    CLOSE cur_orderby; /*关闭游标*/
    END;
      

  10.   

    问题解决了,谢谢duanzilin(寻)