逻辑上有矛盾,你没有考虑清楚吧,什么叫先按时间排,再把相同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放一起就不是按时间排了吧?
万一是
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放一起就不是按时间排了吧?
我现在只能分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
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这真是一个很有趣的排序问题!!!
------------------- ----------
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>
有什么问题?
排序结果见楼上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 葫芦岛 辽宁 如意通显然不是符合楼主要求的
(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
名称 是否为空?类型
------------------------------- -------- ----
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;