觉得以下SQL有点繁琐,只是对一张表操作,想不出好的方法。请高手优化!谢谢诶
select *
from p_bzrj_yw_t
where (rydh, bbh) in (select rydh, bbh
from p_bzrj_yw_t
where (rydh, bbh) in (select rydh, max(bbh)
from p_bzrj_yw_t t
where lcbs = '15'
and xzzzqx < '20090810'
group by rydh)
group by rydh, bbh
having count(*) < 2)
如下表:
RYDH BBH LCBS CZDW YWBH
C052008B0121 00 15 010600 01060008006761
C052008B0121 01 15 010600 01060008006762
C052008B0121 02 15 010600 01060008006763
C052008B0124 00 15 010600 01060008006764
C052008B0124 01 15 010600 01060008006765
C052008B0124 01 15 010600 01060008006766
C052008B0129 00 15 010600 01060008006769
C052008B0132 00 15 010600 01060008006772
C052008B0135 00 15 010600 01060008006775目标选出:相同RYDH中最大BBH只有一条的那些记录。
C052008B0121 02 15 010600 01060008006763
C052008B0129 00 15 010600 01060008006769
C052008B0132 00 15 010600 01060008006772
C052008B0135 00 15 010600 01060008006775
select *
from p_bzrj_yw_t
where (rydh, bbh) in (select rydh, bbh
from p_bzrj_yw_t
where (rydh, bbh) in (select rydh, max(bbh)
from p_bzrj_yw_t t
where lcbs = '15'
and xzzzqx < '20090810'
group by rydh)
group by rydh, bbh
having count(*) < 2)
如下表:
RYDH BBH LCBS CZDW YWBH
C052008B0121 00 15 010600 01060008006761
C052008B0121 01 15 010600 01060008006762
C052008B0121 02 15 010600 01060008006763
C052008B0124 00 15 010600 01060008006764
C052008B0124 01 15 010600 01060008006765
C052008B0124 01 15 010600 01060008006766
C052008B0129 00 15 010600 01060008006769
C052008B0132 00 15 010600 01060008006772
C052008B0135 00 15 010600 01060008006775目标选出:相同RYDH中最大BBH只有一条的那些记录。
C052008B0121 02 15 010600 01060008006763
C052008B0129 00 15 010600 01060008006769
C052008B0132 00 15 010600 01060008006772
C052008B0135 00 15 010600 01060008006775
解决方案 »
- plsql deveploer软件奇怪问题
- 一个奇怪的问题
- 分别取每个行政区前5条的数据,sql 如何写的呢?
- 如何使用JDBC创建一个function,procedure或者package?
- 高手请帮我看看 不知道哪出错了
- Oracle10.2G导入dmp到Oracle11.2G时出现错误,无法导入,急!
- 如何用一条语句查询前N条最大的记录
- 往字段插入超过2500个字符,怎么处理?
- yuaiwu(zrsoft)请进来拿分
- !!!*****寻Microsoft ODBC driver for Oracle联接Oracle9i方案(MSDTC)*****!!!
- 怎么写SQL语句可以实现这样的效果?
- 求高手帮忙(超急):ORACLE里如何提取一个字段中的字符重复数
select rydh,bbh,lcbs,czdw,ywbh,rn,
lag(bbh)over(partition by rydh order by rn desc)lg from(
select rydh,bbh,lcbs,czdw,ywbh,
row_number()over(partition by rydh order by bbh desc)rn from test_b))
where rn=1 and bbh<>nvl(lg,'*')
不是很难,只是楼主诚意不够哦