Nik*_*ikT 2 sql sql-server ssms
我正在尝试获取类似于下面的desired_output列的列,并尝试过像DENSE_RANK和ROW_NUMBER这样的函数,但似乎无法在此处获得正确的组合.我没有关键来确定连续组之间的"过渡" .
因此,每次每个id_key命中一个新组时,无论它是否已经按照该组击中(按顺序排序),我都想开始一个新的"过渡"
最终目标是获得每个desired_output的MIN和MAX 序列,我将使用GROUP BY.我能够使用LEAD/LAG/JOINS的复杂查询来完成此任务,但是想知道是否有人知道类似DENSE_RANK的函数(或者使用DENSE_RANK的方法),它将给出下面的desired_output(绘制完整图片) .
谢谢 !
id_key sequence group desired_output
1 1 A 1
1 2 A 1
1 3 B 2
1 4 B 2
1 5 B 2
1 6 B 2
1 7 C 3
1 8 C 3
1 9 C 3
1 10 B 4
1 11 B 4
1 12 B 4
1 13 C 5
1 14 C 5
2 15 A 1
2 16 A 1
2 17 B 2
2 18 B 2
2 19 C 3
2 20 C 3
2 21 B 4
2 22 C 5
2 23 C 5
2 24 C 5
Run Code Online (Sandbox Code Playgroud)
试试这个:
SELECT id_key, sequence, [group],
SUM(flag) OVER (PARTITION BY id_key
ORDER BY sequence) + 1 AS desired_output
FROM (
SELECT id_key, sequence, [group],
IIF(LAG([group]) OVER (PARTITION BY id_key
ORDER BY sequence) <> [group], 1, 0) AS flag
FROM mytable) AS t
ORDER BY sequence
Run Code Online (Sandbox Code Playgroud)
flag字段标记[group]每个id_key分区中列的任何更改.外部查询使用flag字段来计算运行总计,以便考虑[group]每个id_key分区中的所有更改.