首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回在同一组中具有上一行值的行(Oracle Sql)

返回在同一组中具有上一行值的行(Oracle Sql)
EN

Stack Overflow用户
提问于 2017-10-06 09:57:39
回答 3查看 172关注 0票数 1

我有张桌子,看起来像这样:

代码语言:javascript
复制
|--------+------+---------|------|
| Head   | ID   | Amount  | Rank | 
|--------+------+---------|------|
|      1 | 10   |  1000   |   1  |
|      1 | 11   |  1200   |   2  |
|      1 | 12   |  1500   |   3  |
|      2 | 20   |  3400   |   1  |
|      2 | 21   |  3600   |   2  |
|      2 | 22   |  4200   |   3  |
|      2 | 23   |  1700   |   4  |
|--------+------+---------|------|

我需要一个新列(New_column),它执行以下操作:

代码语言:javascript
复制
|--------+------+---------|------|------------| 
| Head   | ID   | Amount  | Rank | New_column | 
|--------+------+---------|------|------------|
|      1 | 10   |  1000   |   1  |  1000      |   
|      1 | 11   |  1200   |   2  |  1000      |
|      1 | 12   |  1500   |   3  |  1200      |
|      2 | 20   |  3400   |   1  |  3400      |
|      2 | 21   |  3600   |   2  |  3400      |
|      2 | 22   |  4200   |   3  |  3600      |
|      2 | 23   |  1700   |   4  |  4200      |
|--------+------+---------|------|------------|

在每个头数中,如果秩不是1,则取头号内的行数和前面的秩号(等级2取同一头内的等级1,而秩3取同头内的秩2,等等)

我知道如何在其他编程语言中使用For循环修复它,但不知道如何使用SQL进行修复。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-06 10:02:08

我觉得你基本上想让lag()

代码语言:javascript
复制
select t.*,
       lag(amount, 1, amount) over (partition by head order by rank) as new_column
from t;

lag()的三个参数形式允许您提供一个默认值。

票数 1
EN

Stack Overflow用户

发布于 2017-10-06 10:09:54

您可以使用此更新:

代码语言:javascript
复制
UPDATE your_table b
SET New_column = CASE WHEN rank = 1 then Amount
                      ELSE (select a.Amount FROM your_table a where a.ID = b.ID and a.rank = b.rank-1) END
票数 1
EN

Stack Overflow用户

发布于 2017-10-06 10:22:46

您可以在派生表的秩-1上加入相同的表(子查询)。

代码语言:javascript
复制
   select t1.*,case when t1.rank=1 then amount else t2.amount new_amount 
   from your_table t1 left join (select Head,ID,Amount,Rank from your_table) t2 
   on t1.head=t2.head and t1.rank=t2.rank-1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46603116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档