- SQL code
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的数据不算在内
更新last的值
性能有要求
------解决方案--------------------
标题党的嫌疑。。。
------解决方案--------------------
根据你要的结果排序,偏移一位应该就OK吧
------解决方案--------------------
标题党。
------解决方案--------------------
SQL> update b set last=
2 (select max(a.money) from b a where a.tim < b.tim and a.what is not null and a.what <> 0 and b.name=a.name)
3 /
6 rows updated
SQL> select * from b;
NAME PLACE TIM WHAT MONEY LAST
---------- -------------------- ----------- -------------------- ---------- ----------
1 超市 2012/4/13 1 12 13
1 超市 2012/4/11 1 13
1 超市 2012/4/10 0 14
2 学校 2012/4/7 1 16
2 学校 2012/4/16 1 31 16
2 学校 2012/4/26 1 12 31
6 rows selected