PL/SQL问题 查询出一段时间里最新的记录比如一个存款记录表A
7.1 张三存款为500 李四为300 王五800
7.8 张三的变成900 王五的变为600 李四的没变
7.23 李四的变成了1600 别人的没变查询结果:
张三900 李四1600 王五 600用SQL查询出7.1~7.30 所有人的最新存款也就是到7.30日的最新存款
注,表里有N个用户,存款值有的可能每天都在变化也有的几天变化一次。
7.1 张三存款为500 李四为300 王五800
7.8 张三的变成900 王五的变为600 李四的没变
7.23 李四的变成了1600 别人的没变查询结果:
张三900 李四1600 王五 600用SQL查询出7.1~7.30 所有人的最新存款也就是到7.30日的最新存款
注,表里有N个用户,存款值有的可能每天都在变化也有的几天变化一次。
======================
资金变动表P
----------------------
Date Name Fund
6月及以前数据省略
7.1 张三 500
7.1 李四 300
7.1 王五 800
7.8 张三 900
7.8 王五 600
7.23 李四 1600
8月数据省略
======================
注:Fund为当天的最新资金量。查询出截止到7.23所有人资金的最新数据。查询结果:
Name Fund
张三 900
李四 1600
王五 600**********************************
望高手帮忙,谢了先。
from P t
where t.rowid=(select max(rowid)
from P
where to_char("Date",'mm')='07'
and
Name=t.Name
)
create table P
(
"Date" Date,
Name varchar2(20),
Fund number
)
--truncate table P
--插入测试数据
insert into P
select to_date('7.1','mm.dd'),'张三', 500 from dual
union all
select to_date('7.1','mm.dd'),'李四', 300 from dual
union all
select to_date('7.1','mm.dd'),'王五', 800 from dual
union all
select to_date('7.8','mm.dd'),'张三', 900 from dual
union all
select to_date('7.8','mm.dd'),'张三', 3000 from dual
union all
select to_date('7.8','mm.dd'),'王五', 600 from dual
union all
select to_date('7.23','mm.dd'),'李四', 1600 from dual
union all
select to_date('7.23','mm.dd'),'李四', 100 from dual
union all
select to_date('7.23','mm.dd'),'李四', 500 from dual;--测试
select *
from P t
where t.rowid=(select max(rowid)
from P
where to_char("Date",'mm')='07'
and
Name=t.Name
)--结果
Date NAME FUND
1 2006-7-8 张三 3000
2 2006-7-8 王五 600
3 2006-7-23 李四 500
where p.name=p1.name and p.date=p1.mx and p.date < 给定日期
from P t
where t.主键=(select max(主键)
from P
where to_char("Date",'mm')='07'
and
Name=t.Name
)
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选终选的30位数据库工程师将与您展开积极的互动。他们会为您的问题提供满意的答案,此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=570&pointid2=1&pointid3=5&pcount=stc
非常感谢您对本次活动的支持!
----------------------------------------需要说明的是Fund字段不是递增的,资金变动可能增也可能减。
还有相同日期同一个人最多只有一条记录或者当天没有记录,
此表的主键是Date+Name,
vivianfdlpw兄台,不知道这样的主键怎么写代码,请再指点一下。
,P.Fund
from
(
select max("Date") as "LastDate"
,Name
from P
group by Name
)t
join P on t.LastDate=P."Date"
and
t.Name=P.Name
where (Date,Name) in
(
select max(Date),Name from
(
select * from P where Date in (7.1,7.23)
)
group by Name
)
select t.*
,P.Fund
from
(
select max("Date") as "LASTDATE"
,Name
from P
group by Name
)t
join P on t.LASTDATE=P."Date"
and
t.Name=P.Name
where to_char(t.LASTDATE,'mm')='07'
从理论上说这两个哪个效率更高一点,因为软件应用的时候一年的数据有几十万条或更多,
想选用一个效率更高一点的。