求Oracle语法的一条SQL

来源:百度知道 编辑:UC知道 时间:2024/07/02 02:52:15
A表 车辆资料资料(HPHM) 车辆号码
B表 车辆收费记录 (HPHM,SF_DATE) 车辆号码,收费时间
A和B的关系为一对多
我想 select a.hphm,b.sf_date from a,b where a.hphm=b.hphm 只显示车辆最新的那条收费记录匹配,请问高手怎样写SQL语句
A表 车辆资料资料(HPHM) 车辆号码
B表 车辆收费记录 (HPHM,SF_DATE,SF_MONEY) 车辆号码,收费时间,收费金额
A和B的关系为一对多
我想 select a.hphm,b.sf_date,b.sf_money from a,b where a.hphm=b.hphm 只显示车辆最新的那条收费记录匹配,请问高手怎样写SQL语句,要求就是查询出来的数据集(每台车只显示一条它最新的收费记录)

用groupby会比orderby快些:select HPHM,max(SF_DATE) from b group by HPHM

select rownum a.hphm,b.sf_date from a,b where a.hphm=b.hphm and rownum<2 order by sp_date

你可以按收费时间来进行排序,
select a.hphm,top1 b.sf_date from a,b where a.hphm=b.hphm order by b.sf_date desc

select hphm,sf_date
from
(
select b.hphm,b.sf_date,row_number() over(order by sf_date desc) rn
from b
)
where rn=1;

使用oracle的分析函数,最简单不过

select a.hphm, b.sf_money
from a,b,
(select b.hphm,MAX(b.sf_date) as sf_date from b group by b.hphm) c
where a.hphm = b.hphm
and a.hphm = c.hphm
and b.sf_date = c.sf_date