这才是坑爹 刚才那个不是最坑爹的
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