select gys , jsy from gylog a 
where a.gys in (111,222,333,444,555,666) and 
a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)------这个是连接2个表的关键取相同GYS中最大的JSY

解决方案 »

  1.   

    第一句是不可以分开运行的,a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
    取相同GYS中最大的JSY
    那也就是200602  200602  200606而第二个
    select max(jsy) from gylog b group by gys---这个是取安GYS分组取最大的,那肯定就是
    200602  200602  200606
      

  2.   

    你好:我没太明白:
    第一句是不可以分开运行的,a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
    取相同GYS中最大的JSY
    能具体解释一下a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)是怎么运行的吗?
      

  3.   

    select gys , jsy from gylog a 
    where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
    -----------------------------------------------------------------------------------
    SELECT扫描gylog表的每一行时,都会计算(select max(jsy) from gylog b where a.gys=b.gys)的值,然后将计算结果与a.jsy进行比较,若相等,则被选出.下面是扫描分解示意:
    注:每行后面/**/内注释的为此(select max(jsy) from gylog b where a.gys=b.gys)表达式的计算结果:
    gys      jsy
    111      200601      /*扫描此行时,表达式=200602,比较结果:不等*/
    111      200602      /*扫描此行时,表达式=200602,比较结果:相等,被选出*/
    222      200601      /*扫描此行时,表达式=200602,比较结果:不等*/
    222      200602      /*扫描此行时,表达式=200602,比较结果:相等,被选出*/
    333      200603      /*扫描此行时,表达式=200606,比较结果:不等*/
    333      200606      /*扫描此行时,表达式=200606,比较结果:相等,被选出*/
    所以,表扫描结束后,有三行的jsy与表达式运算结果相等而被选出.即:
    111      200602
    222      200602
    333      200606
    -----------------------------------------------------------------------------------
    如果楼主需要第一个语句只返回一条记录333    200606,则可以这样:
    select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog b)      /*去掉 where a.gys=b.gys*/
      

  4.   

    如果楼主需要第一个语句只返回一条记录333    200606,则可以这样:
    select gys , jsy from gylog a where 
    a.jsy=(select max(jsy) from gylog b where a.gys in (111,222,333,444,555,666))
      

  5.   

    各位老大,小弟不理解的是这个:小弟认为select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
    条语句返回的结里最多是一条记录,而(select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy in (select max(jsy) from gylog b group by gys))条语句返回的结里有可能是多条的。
    第一条语句:是连接两个表查询的。
    第二条语句:是对gys进行了分组呵呵见笑了。
    如果要第一条语句的结果:
    select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog )就会得到最大的gys
      

  6.   

    select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)假设表中有
    gys    jsy
    111    1
    111    2
    222    2
    222    3
    222    4
    sql语句都是一条条执行的,对于第一条,由于jsy=1,而在gys=111这组中,jsy最大的是2,所以第一条不符合条件,不取;  第二条,由于jsy=2和gys=111这组中的最大值相等,所以条件符合,取出;再看第三条...都是雷同的
      

  7.   

    select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
    select max(jsy) from gylog b where a.gys=b.gys就是取出当前gys这组中最大的jsy