select d from t2
where(b,c in(
select max(b) b,min(c) c from t2 group by a)
)

解决方案 »

  1.   

    抱歉,我没讲清楚
    B,不是条件,是查询内容。可否用一句SELECT得到以下查询结果:
    以A为GROUP  最小的C所对应的D,以及最大的B
      

  2.   

    没有人回答吗?
    到底行不行?
    问题好像还是能有混淆。可否用一句SELECT得到以下查询结果:
    以A为GROUP  
    查询最小的C所对应的D
    以及最大的B
      

  3.   

    问题阐述不够清楚
    1、是否两张表连接查询?
    2、以A为GROUP  还可以理解
    3、“查询最小的C所对应的D,”是哪张表地C对应哪张表的D
    4、“以及最大的B”什么意思?是C同时对应D和最大的B还是 B又对应什么东东的?
      

  4.   

    有些不清楚,最大的B与最小的C可能对应两个D,除非这样:最大的B中最小的C对应的D.
      

  5.   

    是不是
    Select a,max(b),d from (select a,min(c),b,d from (select * from t1 union select * from t2)) group by a,d
      

  6.   

    select max(X.b) B,V.d D from X,(select min(c) C from X group by a) V
    where c = V.C
    group by X.a
    这样可合意?
      

  7.   

    提问不清楚吗?
    我再解释一下。
    T1,T2是两个相同的表。只要单个表查出来后UNION一下就可以了。最大的B是对GROUP A来说的。最小的C也是对GROUP A 来说的。
    D是该条(最小的C)所对应的纪录中的D,与B无关。比如数据
    A B C D
    2 3 4 5
    2 4 5 3
    1 3 4 5
    1 2 9 7
    希望查询结果是:
    A B D
    2 4 5
    1 2 5上面两位SQL都不成功
    谢谢各位捧场。
      

  8.   

    对不起。修正一下。
    希望查询结果是:
    A B D
    2 4 5
    1 3 5
      

  9.   

    我想应该不可以吧
    如果你的表的第2行 c 改为 4 那结果 最小的C所对应的纪录中的D 不是就3条记录了
      

  10.   

    这个问题看着简单,其实非常的麻烦,比较公认的方法是通过 交叉表来解决楼主试试这个:
    select TA.a,TA.b,TB.d from t1 TA join t1 TB on TA.a=TB.a
    where 
    TA.b=(SELECT MAX(TC.b) FROM t1 TC WHERE TC.a=TA.a group by TC.a )
    and
    TB.c=(SELECT Min(TD.c) FROM t1 TD WHERE TC.a=TB.a group by TC.a )楼主的字段名用的是abcd所以上面的语句读起来很难....hope that helps
      

  11.   

    挂月:有个小错误,应该是这样:
    select ta.a,ta.b,tb.d from t1 ta join t1 tb on ta.a = tb.b
     where ta.b = (select max(tc.b) from t1 tc where tc.a = ta.a group by tc.a)
       and tb.c = (select min(td.c) from t1 td where td.a = tb.a group by td.a)
      

  12.   

    谢谢各位启发,
    写出来了。
    select ta.a, ta.b, tb.c, tb.d from (select a, max(b) b from t1 group by a) ta,
    (select a,c,d from t1 where c in  (select min(c) from t1 group by a) ) tb where ta.a = tb.a;这样考虑:
    把以A为GROUP 得到最大的B 看作一个表
    把以A为GROUP 最小的C所对应的D 看作第二个表
    两个表以A为关联
      

  13.   

    select a,b,d from
    (
     select a,
            max(b) over (partition by a) b,
            d,
            row_number() over (partition by a order by c) rn
       from t1
    )
     where rn = 1;