【发布时间】:2019-02-27 18:27:39
【问题描述】:
我最近开始使用 sql,我正在处理一个有 3 列的表。表格如下:
| 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 |
我想编写一个查询,该查询根据标志中的 indv 值和值分组创建一个新列。例如,对于组 2477,如果组中的每个条目的标志为 0,则其值等于默认编号(假设为 10000),但如果标志为 1,则其值等于组的第一个值。但是,如果 2 个连续标志 = 1 的数字之间的差异大于 50,则 number1 列的值必须对应于数字列中最新的 flag=1 值。它可能看起来令人困惑,因此还提供了一个示例输出:
| indv | number | flag | number1 |
|:----:|:------:|:----:|---------|
| 2477 | 7612 | 1 | 7612 |
| 2477 | 7850 | 0 | 7612 |
| 2477 | 7862 | 0 | 7612 |
| 2477 | 7952 | 1 | 7952 |
| 2477 | 8150 | 0 | 7952 |
| 2477 | 8280 | 0 | 7952 |
| 2477 | 8301 | 1 | 8301 |
| 2560 | 7612 | 0 | 10000 |
| 2560 | 7850 | 0 | 10000 |
| 2560 | 7862 | 0 | 10000 |
| 2877 | 3422 | 1 | 3422 |
| 2877 | 3423 | 1 | 3422 |
| 2877 | 5612 | 1 | 5612 |
| 2877 | 6123 | 1 | 6123 |
【问题讨论】:
-
请不要使用不适用于您的问题的标签。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请添加only你实际使用的数据库的标签
-
感谢您的编辑,约翰。将在以后的问题中处理它。