日期:2014-05-17  浏览次数:20788 次

问一个SQL select的问题,请大侠不吝赐教
本帖最后由 SSS520 于 2013-06-19 10:32:09 编辑
现在有一个T表,表中有四列,分别为纳税人识别号(nsrsbh)、税种代码(szdm)、登记时间(sj)、附加信息(xx)。表格如下:
nsrsbh     szdm       sj          xx
4511        01       2007.03      kii
4508        01       2009.01      abc
4508        01       2010.02      xyz
4509        01       2011.06      gtt
4509        03       2011.06      eet
4508        02       2012.01      frr
4509        01       2012.08      frr
4511        03       2012.06      gop
4508        01       2012.10      att

这个表是登记纳税人登记税种的表,因为纳税人有时候会改变税种的附加信息,会导致一年内有几条同一个税种附加信息(xx)的记录,现在要找出税种代码(szdm)为01的所有纳税人最新的附加信息(xx),请问要怎么写?
如上表,我要输出的结果应该如下:
nsrsbh     szdm       sj          xx
4508        01       2012.10      att
4509        01       2012.08      frr
4511        01       2007.03      kii

开始我是这样写的:
select t.* from T where t.szdm='01' and not exists(select 1 from t j where t.nsrsbh=j.nsrsbh and t.sj<j.sj)

这样写输出的结果为:
nsrsbh     szdm       sj          xx
4508        01       2012.10      att
4509        01       2012.08      frr
如果某个纳税人识别号没有多条记录的话就会被过滤掉,不符合我的需求,
请教一下各位大哥看看这个SQL怎么写啊?感谢!

------解决方案--------------------
select t.* from T a where t.szdm='01' 
and sj=(select max(sj) from T where nsrsbh=a.nsrsbh)