本帖最后由 yangfei_01 于 2011-12-13 14:33:11 编辑

解决方案 »

  1.   

    select * from tbname order by aid desc,pid asc;
      

  2.   

    我说了不要针对这组数据。。数据变成这样的楼上的语句得到的是什么?
    +-----+------+
    | pid | aid  |
    +-----+------+
    |   1 |    1 |
    |   2 |    2 |
    |   3 |    2 |
    |   4 |    1 |
    +-----+------+ +-----+------+
    | pid | aid  |
    +-----+------+
    |   2 |    2 |
    |   3 |    2 |
    |   1 |    1 |
    |   4 |    1 |
    +-----+------+
      

  3.   

    +-----+------+
    | pid | aid |
    +-----+------+
    | 1 | 1 |
    | 2 | 2 |
    | 3 | 2 |
    | 4 | 1 |
    +-----+------+ 
    要求结果是什么?
    pid aid
    2 2
    3 2
    1 1
    4 1
      

  4.   

    +-----+------+
    | pid | aid  |
    +-----+------+
    |   1 |    1 |
    |   2 |    2 |
    |   3 |    2 |
    |   4 |    1 |
    +-----+------+
    希望得到的是
    +-----+------+
    | pid | aid  |
    +-----+------+
    |   1 |    1 |
    |   4 |    1 |
    |   2 |    2 |
    |   3 |    2 |
    +-----+------+
    排序过程是先选出pid最小的一行,然后与这行具有相同aid的都选出,按pid升序排列;依次继续选择
      

  5.   


    create table tbtest (pid int not null primary key, aid int);insert into tbtest values(1, 2);
    insert into tbtest values(2, 1);
    insert into tbtest values(3, 1);
    insert into tbtest values(4, 2);/*
    希望结果
    pid  aid  
     1     2 
     4     2 
     2     1 
     3     1 
    */大家帮帮忙,尽量效率高些。
      

  6.   

    +-----+------+
    | pid | aid |
    +-----+------+
    | 1 | 3
    | 2 | 1 |
    | 3 | 2 |
    | 4 | 2 |
    | 5 | 1 |
    | 6 | 3 |
    +-----+------+
    要求结果是什么?
      

  7.   

    +-----+------+
    | pid | aid  |
    +-----+------+
    |   1 |    3 |
    |   2 |    1 |
    |   3 |    2 |
    |   4 |    2 |
    |   5 |    1 |
    |   6 |    3 |
    +-----+------+
    希望得到的结果是
    +-----+------+
    | pid | aid  |
    +-----+------+
    |   1 |    3 |
    |   6 |    3 |
    |   2 |    1 |
    |   5 |    1 |
    |   3 |    2 |
    |   4 |    2 |
    +-----+------+
      

  8.   

    现在可以用这条语句得到结果,但是有一个连接操作效率不高select distinct A.pid, A.aid from tbtest as A inner join 
    tbtest as B
    on A.aid=B.aid
    order by B.pid
      

  9.   

    首先按照第一列pid排序,而具有相同aid的行会排在一起这样即可
    select * from tbname order by aid ,pid ;
      

  10.   

    你要按物理顺序排序,
    SET @a=0;
    SET @b=0;
    SELECT a.* FROM ttq a INNER JOIN (
    SELECT aid,MIN(js) AS pl FROM (
    SELECT *,@a:=IF(@b=aid,@a,@a+1) AS js,@b:=aid FROM ttq) a GROUP BY aid) b
    ON a.aid=b.aid ORDER BY b.pl
      

  11.   

    11楼的语句能解释下么?另外我希望得到可以通过下面这种形式执行的sqlStatement stmt = con.createStatement();
    String sql = "*******";
    ResultSet rs = stmt.executeQuery(sql);
      

  12.   

    select a.pid,a.aid,min(b.pid)
    from tbtest a,tbtest b
    where a.aid=b.aid
    group by a.pid,a.aid
    order by 3,1
      

  13.   

    先确认一下,你是要根据AID中的物理位置排序,如是。则11楼是正确的
    +-----+------+
    | pid | aid |
    +-----+------+
    | 1 | 3
    | 2 | 1 |
    | 3 | 2 |
    | 4 | 2 |
    | 5 | 1 |
    | 6 | 3 |
    | 1 | 4 |
    +-----+------+
    结果是什么?pid aid
    1 3
    6 3
    2 1
    5 1
    3 2
    4 2
    1 4
    ?
      

  14.   

    是按照aid物理位置排序,14楼给出的这个结果也正确,11楼的语句没办法这么执行吧?ResultSet rs = stmt.executeQuery(sql);
      

  15.   

    1、插入有自增字段的临时表,字段ID自增,再运行
    SELECT a.* FROM ttq a INNER JOIN (
    SELECT aid,MIN(ID) AS pl FROM 临时表 a GROUP BY aid) b
    ON a.aid=b.aid ORDER BY b.pl2、将
    11楼代码生成VIEW、SP,再调用。