gpt4 book ai didi

sql - 根据条件用上一行的值更新列

转载 作者:行者123 更新时间:2023-12-04 01:34:05 24 4
gpt4 key购买 nike

我有一个表,我需要在其中找到满足几个条件的值,如果满足这些条件,我需要为每一列分配相同的值

 Table 
ID Name Salary rownum
1 Jon 500 1
1 Jim 600 2
1 Jack 700 3
1 Bob 1000 4
2 Adam 500 1
2 Aron 600 2
2 James 900 3
2 Jay 1000 4

第一个条件是我需要有相同的 ID,然后在 ID 内我需要比较第一行和第二行如果差异小于或等于 100。我只能比较 Rownum 1 与 2 和 2用 3 等等。确定条件是否满足后,我需要将薪水值更新为 Rownum 1 的值,直到满足条件并保持名称相同为止。

预期输出

 Table 
ID Name Salary rownum
1 Jon 500 1
1 Jim 500 2
1 Jack 500 3
1 Bob 1000 4
2 Adam 500 1
2 Aron 500 2
2 James 900 3
2 Jay 900 4

Jim 的薪水为 600,与 Jon 的薪水的差值 <=100,而 Jack 的薪水为 700,与 Jim 的差值 <=100,因为 Jim 在 Jon 的薪水范围内,而 Jack 在 Jim 的薪水范围内,这些值是连续的,所以我们需要Jon 对这些行的值,而 Bob 是独立的,因为它不在范围内。同样的逻辑适用于 ID = 2

最佳答案

试试这个:

如果"左连接 self+ 其中 Salary + 100 * (jointable.rownum - rownum) = jointable.Salary's data is not null"然后更新 Salary

update T
set Salary = NewSalary
from (
select T2.*,T1.Salary NewSalary,(T2.rownum - T1.rownum) fd
from [Table] T1
left join [Table] T2 on T1.ID = T2.ID
and T1.rownum <> T2.rownum
and (T2.rownum - T1.rownum) > 0
and T1.[Salary] + 100 * (T2.rownum - T1.rownum) = T2.[Salary]
where T2.id is not null
) T ;

| ID |  Name | Salary | rownum |
|----|-------|--------|--------|
| 1 | Jon | 500 | 1 |
| 1 | Jim | 500 | 2 |
| 1 | Jack | 500 | 3 |
| 1 | Bob | 1000 | 4 |
| 2 | Adam | 500 | 1 |
| 2 | Aron | 500 | 2 |
| 2 | James | 900 | 3 |
| 2 | Jay | 900 | 4 |

SQL Fiddle DEMO LINK

关于sql - 根据条件用上一行的值更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50691639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com