我有一个带有列(差)的表。
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
现在,(从第二行开始)如果'difference'<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
答案 0 :(得分:0)
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) +
或适用于数据库的任何表达式。