我最近开始使用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 |
答案 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
。