日期:2014-05-17  浏览次数:20695 次

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