我想查询当前行中哪个回复的最后一个不同值行号。 NUMBER只有2个值。
表A给出
ROWNUM NUMBER 1 1 2 1 3 1 4 1 5 -1 6 -1 7 1 8 1 9 -1 10 -1 11 -1某些查询
表A的预期结果。
ROWNUM NUMBER LASTDIFFERENT 1 1 5 2 1 4 3 1 3 4 1 2 5 -1 3 6 -1 2 7 1 3 8 1 2 9 -1 10 -1 11 -1
答案 0 :(得分:0)
这可能属于"只是因为你并不意味着你应该这样做。"我没有看到任何优雅的问题解决方案,但这是一个有效的解决方案,至少对于您的示例数据而言:
with switches as(
select
rownum, number,
case
when lag(number) over (order by rownum) = number then 0
else 1
end switch
from TableA
),
groups as (
select
rownum, number, sum (switch) over (order by rownum) group_id
from switches
)
select
rownum, number, -- group_id,
max (rownum) over (partition by group_id) - rownum + 2 as last_different
from groups
我在你的样本数据上运行了这个并得到了这些结果:
rownum number last_different
1 1 5
2 1 4
3 1 3
4 1 2
5 -1 3
6 -1 2
7 1 3
8 1 2
9 -1 4
10 -1 3
11 -1 2