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怎么写啊?感谢!
3 个解决方案
#1
select t.* from T a where t.szdm='01'
and sj=(select max(sj) from T where nsrsbh=a.nsrsbh)
and sj=(select max(sj) from T where nsrsbh=a.nsrsbh)
#2
呵呵,谢谢楼上的,我找出问题所在了,原来是在not exists里面写漏了一个条件j.szdm='01',改为如下就可以正确得出结果:
select t.* from T where t.szdm='01' and not exists(select 1 from t j where t.nsrsbh=j.nsrsbh and j.szdm='01' and t.sj<j.sj)
非常感谢大哥!
楼上的大哥的写法也是在括号里面漏写了szdm='01',加上这个条件就可以得出正确结果。
以上全部在ORACLE通过验证!
select t.* from T where t.szdm='01' and not exists(select 1 from t j where t.nsrsbh=j.nsrsbh and j.szdm='01' and t.sj<j.sj)
非常感谢大哥!
楼上的大哥的写法也是在括号里面漏写了szdm='01',加上这个条件就可以得出正确结果。
以上全部在ORACLE通过验证!
#3
多点人来讨论我就结贴啊!
#1
select t.* from T a where t.szdm='01'
and sj=(select max(sj) from T where nsrsbh=a.nsrsbh)
and sj=(select max(sj) from T where nsrsbh=a.nsrsbh)
#2
呵呵,谢谢楼上的,我找出问题所在了,原来是在not exists里面写漏了一个条件j.szdm='01',改为如下就可以正确得出结果:
select t.* from T where t.szdm='01' and not exists(select 1 from t j where t.nsrsbh=j.nsrsbh and j.szdm='01' and t.sj<j.sj)
非常感谢大哥!
楼上的大哥的写法也是在括号里面漏写了szdm='01',加上这个条件就可以得出正确结果。
以上全部在ORACLE通过验证!
select t.* from T where t.szdm='01' and not exists(select 1 from t j where t.nsrsbh=j.nsrsbh and j.szdm='01' and t.sj<j.sj)
非常感谢大哥!
楼上的大哥的写法也是在括号里面漏写了szdm='01',加上这个条件就可以得出正确结果。
以上全部在ORACLE通过验证!
#3
多点人来讨论我就结贴啊!