大概是这个题目 create table B ( name number, what varchar(20), place varchar(20), tim date, money number, last number, primary key(name,place,tim) )SQL> select * from B;
NAME WHAT PLACE TIM MONEY Last ---------- -------------------- -------------------- ----------- ---------- ---------- 1 1 超市 2012/4/13 12 1 1 超市 2012/4/11 13 1 0 超市 2012/4/10 14 2 1 学校 2012/4/7 16 2 1 学校 2012/4/16 31 2 1 学校 2012/4/26 12
使用LAG+开窗函数,可以查到你要求的数据。UPDATE语法不熟,你自己搞定吧。select name,what,place,tim,money,lag(money)over(partition by name,place order by name,tim) as last from ( select '1' as name,'1' as what,'超市' as place,sysdate as tim, 12 as money from dual union all select '1' ,'1' ,'超市',sysdate-1, 15 from dual union all select '1' ,'0' ,'超市',sysdate+1, 25 from dual union all select '2' ,'1' ,'学校',sysdate, 35 from dual union all select '2' ,'1' ,'学校',sysdate-1, 45 from dual union all select '2' ,'1' ,'学校',sysdate-2, 55 from dual) where what = '1' --结果 NAME WHAT PLACE TIM MONEY LAST ---- ---- ----- ------------------------- ---------------------- ---------------------- 1 1 超市 2012-04-12 16:47:30 15 1 1 超市 2012-04-13 16:47:30 12 15 2 1 学校 2012-04-11 16:47:30 55 2 1 学校 2012-04-12 16:47:30 45 55 2 1 学校 2012-04-13 16:47:30 35 45
create table B
(
name number,
what varchar(20),
place varchar(20),
tim date,
money number,
last number,
primary key(name,place,tim)
)SQL> select * from B;
NAME WHAT PLACE TIM MONEY Last
---------- -------------------- -------------------- ----------- ---------- ----------
1 1 超市 2012/4/13 12
1 1 超市 2012/4/11 13
1 0 超市 2012/4/10 14
2 1 学校 2012/4/7 16
2 1 学校 2012/4/16 31
2 1 学校 2012/4/26 12
6 rows selected
是某人去某地买东西last=前面一个日期在同一个地方买的东西的钱,不为0不为空的数据,what=0的数据不算在内
(
select '1' as name,'1' as what,'超市' as place,sysdate as tim, 12 as money from dual
union all
select '1' ,'1' ,'超市',sysdate-1, 15 from dual
union all
select '1' ,'0' ,'超市',sysdate+1, 25 from dual
union all
select '2' ,'1' ,'学校',sysdate, 35 from dual
union all
select '2' ,'1' ,'学校',sysdate-1, 45 from dual
union all
select '2' ,'1' ,'学校',sysdate-2, 55 from dual)
where what = '1'
--结果
NAME WHAT PLACE TIM MONEY LAST
---- ---- ----- ------------------------- ---------------------- ----------------------
1 1 超市 2012-04-12 16:47:30 15
1 1 超市 2012-04-13 16:47:30 12 15
2 1 学校 2012-04-11 16:47:30 55
2 1 学校 2012-04-12 16:47:30 45 55
2 1 学校 2012-04-13 16:47:30 35 45