oracle 库中表t,有四字段a(字符串), b (字符串), c(字符串), d(int型)...别的字段不提,表的完整性,正确性无问题!数据:
a   b   c   d
a1  b1  c1  1
a1  b2  c1  2
a1  b3  c1  3
a1  b1  c2  1
a1  b2  c2  2
.
.
a1  bm  cn  1
a1  bj  cn  2
a1  bq  cn  3
a1  br  cn  4
sql要求:输出四字段,要求:对应c字段选出最大的d字段值
如结果是:
a1 b3 c1 3
a1 b3 c2 2
.
a1 br cn 4请给出SQL语句>oracle的!谢谢另:oracle 中 group by 用不了?

解决方案 »

  1.   

    是你的用法不对
    还有,那个结果看得不大明白
    a,b,c,d四个四段各需要什么取值
      

  2.   

    select * from tab a
    where not exists(select 1 from tab b where a.c=b.c and a.d<b.d)
      

  3.   

    select a,  b,  c, max(d) from tab group a, b, c
      

  4.   

    a列值固定,即 where t.a = 'a1' and
    搜索出对应一组c值(如c= c1 时)取出d最大值的记录当c = c2 时,取出来的是a1 b2 c2 2
    当c = cn 时,取出来的是a1 br cn 4要求输出全部字段!!!刚刚试了不输出b字段时sql:
    select  t.a, t.c, max(t.d)  from t  where t.a='a1' group by t.a, t.c但是要输出t.b就不对了???
    >????
      

  5.   


    所说:与我上面情况一直,关键 group by 之后我b列值不参加分组,情况就不对了,给你看实际数据
    不输出b列时::>>>>>>
    JH CH MAX(T.PJXH)
    高11 1 4
    高11 10 3
    高11 11 3
    高11 12 2
    高11 13 2
    高11 14 2
    高11 15 2
    高11 16 3
    高11 17 1
    高11 18 1
    高11 19 1
    高11 2 2
    高11 20 1
    高11 21 1
    高11 22 1
    高11 23 2
    高11 24 1
    高11 25 1
    高11 26 1
    高11 27 1
    高11 28 1
    高11 29 1
    高11 3 3
    高11 30 1
    高11 31 1
    高11 32 1
    高11 33 2
    高11 4 2
    高11 5 3
    高11 6 4
    高11 7 2
    高11 8 2
    高11 9 4
    高11 补1 1
    输出b列时:>>>>>>>>>>>>>
    JH CH DJSD2 MAX(T.PJXH)
    高11 1 1592.4 4
    高11 1 1594 3
    高11 10 1722.2 1
    高11 10 1723.6 3
    高11 11 1728 1
    高11 11 1729.4 3
    高11 12 1749.2 1
    高11 12 1750.6 2
    高11 13 1759.6 1
    高11 13 1761 2
    高11 14 1770.6 1
    高11 14 1771.2 2
    高11 15 1781 1
    高11 15 1782.4 2
    高11 16 1788.4 1
    高11 16 1790.2 3
    高11 16 1791.6 2
    高11 17 1867.4 1
    高11 18 1910.2 1
    高11 19 1918.6 1
    高11 2 1598.4 1
    高11 2 1599.8 2
    高11 20 1944.2 1
    高11 21 1948 1
    高11 22 1957.6 1
    高11 23 1975.6 2
    高11 24 2110 1
    高11 25 2114.6 1
    高11 26 2123.8 1
    高11 27 2167 1
    高11 28 2199.2 1
    高11 29 2207.6 1
    高11 3 1603 3
    高11 3 1604.4 1
    高11 30 2220.6 1
    高11 31 2226 1
    高11 32 2232 1
      

  6.   

    1  select  t.jh, t.ch, max(t.pjxh)  from jhtqall.ac06 t  where t.jh ='高11' group by t.jh, t.ch二   select  t.jh, t.ch,t.djsd2,  max(t.pjxh)  from jhtqall.ac06 t  where t.jh ='高11' group by t.jh, t.ch, t.djsd2
      

  7.   

    2楼的应该可以啊
    select * from tab a 
    where not exists(select 1 from tab  where c=a.c and d >a.d)
      

  8.   

    select * from t where (c, d) in (select c, max(d) from t group by c)
      

  9.   


    根据您的提示:我写了个SQL,成功!估计需要优化,请看
    select t.a, t.b, t.c, t.d from t where (t.c, t.d) in (select tt.ch, max(tt.d) from t tt where tt.a= 'a1' group by tt.c) and t.a= 'a1' order by t.b
      

  10.   


    把in 换成 exists select t.a, t.b, t.c, t.d from t where exists (select 1 from (select tt.ch, max(tt.d) d from t tt where tt.a= 'a1' group by tt.c) t_1 where t.c=t_1.ch and t.d=t_1.d) and t.a = 'a1' order by t.b;