根据sql中的条件为每个组设置新的列值

时间:2019-02-27 18:27:40

标签: sql group-by subquery

我最近开始使用sql,并且我正在处理具有3列的表。下表如下:

__init__
我想编写一个查询,该查询基于对indv值和该标志中的值的分组来创建新列。例如,对于组2477,将创建一个新的列号1,以便如果组中每个条目的标志为0,则其值等于默认值(假设为10000),但如果标志为1,则其值等于组的第一个值。但是,如果2个连续标志的数字= 1之间的差异大于50,则number1列必须具有与number列中最新的flag = 1值相对应的值。似乎令人困惑,因此还提供了示例输出:

| indv | number | flag |
|:----:|:------:|:----:|
| 2477 |  7612  |   1  |
| 2477 |  7850  |   0  |
| 2477 |  7862  |   0  |
| 2477 |  7952  |   1  |
| 2477 |  8150  |   0  |
| 2477 |  8280  |   0  |
| 2477 |  8301  |   1  |
| 2560 |  7612  |   0  |
| 2560 |  7850  |   0  |
| 2560 |  7862  |   0  |
| 2877 |  3422  |   1  |
| 2877 |  3423  |   1  |
| 2877 | 5612   |  1   |
| 2877 | 6123   |  1   |

1 个答案:

答案 0 :(得分:0)

您可以使用相关子查询:

select t.*,
       coalesce((select t1.number
                 from table t1 
                 where t1.indv = t.indv and t1.number <= t.number and t1.flag = 1 
                 order by t1.number desc
                 limit 1
                ), 10000
               ) as number1
from table t; 

不同的数据库具有不同的样式来限制行,因此您需要相应地更改subquery