当前位置: 代码迷 >> Oracle开发 >> 这才是坑爹 刚才那个不是最坑爹的,该如何处理
  详细解决方案

这才是坑爹 刚才那个不是最坑爹的,该如何处理

热度:60   发布时间:2016-04-24 07:29:41.0
这才是坑爹 刚才那个不是最坑爹的
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
  相关解决方案