我有一个列(差异)的表。
difference tableNumber
10
22
03
45
32
120
65
34
85
90
130
140
65
21
01
45
150
55
5000
87
43
tableNumber的第一行将以'1'开头。
difference tableNumber
10 1
22
03
45
32
120
65
34
85
90
130
140
65
21
01
45
150
55
5000
87
43
现在,(从第二行开始)如果“差异”<100,则插入前一行值的“tableNumber”
否则,如果'difference'> 100,则将前一行'tableNumber'的值增加1并将其插入当前行。
编辑:示例表:( tableNumber是预期的输出)
那么,这将是预期的输出:
difference tableNumber
10 1
22 1
03 1
45 1
32 1
120 2
65 2
34 2
85 2
90 2
130 3
140 4
65 4
21 4
01 4
45 4
150 5
55 5
5000 6
87 6
43 6
SQL表表示无序集。您想要做什么似乎取决于行的顺序。我假设你有一个指定排序的列。我们称之为ord
。
我认为以下基本上做你想要的:
select difference,
1 + sum(case when difference < 100 then 0 else 1 end) over (order by ord) as tablenumber
from t;
这没有考虑表中的第一个“1”。但是,这对于您真正想要解决的问题来说似乎是多余的(识别值小于100的相邻组)。
如果这很重要,你可以用1 +
替换(select difference from t order by ord fetch first row only) +
- 或者任何适合你的数据库的表达式。