我有一张这样的表:
WITH S AS (
SELECT 'B' type, 1 number
UNION SELECT 'B', 2
UNION SELECT 'B', 3
UNION SELECT 'B', 4
UNION SELECT 'B', 5
UNION SELECT 'A', 6
UNION SELECT 'A', 7
UNION SELECT 'B', 8
UNION SELECT 'B', 9
UNION SELECT 'B', 10
UNION SELECT 'C', 11
UNION SELECT 'A', 12
UNION SELECT 'B', 13
UNION SELECT 'B', 14
UNION SELECT 'B', 15
UNION SELECT 'B', 16
UNION SELECT 'B', 17
UNION SELECT 'A', 18
UNION SELECT 'C', 19
UNION SELECT 'B', 20
UNION SELECT 'B', 21
)
如何为每种类型获得独特的数字序列(例如,3个或更多)?
例如。对于B 1~5,对于B 8~10 - ' B2'我怀疑应该有LEAD/LAG
和DENSE_RANK()
的组合,但无法弄清楚如何申请。如果重要的话,数字是唯一的。
结果如下:
Type Number Sequence
-----------------------
B 1 B1
B 2 B1
B 3 B1
B 4 B1
B 5 B1
A 6 NULL
......................
B 8 B2
B 9 B2
B 10 B2
C 11 NULL
A 12 NULL
B 13 B3
....................
B 17 B3
答案 0 :(得分:1)
一种方法是使用DENSE_RANK()
和[{3}}之差的组合。
(c2,c3) > (1,1)
c2 > 1 OR ((c2 = 1) AND (c3 > 1))
答案 1 :(得分:0)
有一个回复,只是几分钟,它包含我想要的确切解决方案(其余我可以弄清楚):
SELECT type, R1 = min(number), R2 = max(number) FROM (
SELECT *, number - ROW_NUMBER() OVER (PARTITION BY type ORDER BY number) Grp From S
) A
GROUP BY type
无法评价答案 - 它已被删除。 解决方案是找到" Gaps and Islands" - 现在我知道了。