![](/img/trans.png)
[英]SQL Getting row number when the value is different from previous one, no matter whether the value shows before
[英]SQL Getting row number only when the value is different from all previous values
我希望计数仅在之前未显示值时加一。 基表是:
rownum product
1 coke
2 coke
3 burger
4 burger
5 chocolate
6 apple
7 coke
8 burger
目标是:
rownum product
1 coke
1 coke
2 burger
2 burger
3 chocolate
4 apple
4 coke
4 burger
我想将当前行与所有以前的行进行比较,但我很难调用所有以前的行。 谢谢!
这是一个缺口和孤岛问题。 这是使用窗口函数的一种方法:想法是使用每次看到产品的“第一次”出现时递增的窗口总和:
select t.*,
sum(case when rn = 1 then 1 else 0 end) over(order by rownum) new_rownum
from(
select t.*, row_number() over(partition by product order by rownum) rn
from mytable t
) t
order by rownum
几种不同的方法来实现这一点。 我想你会选择一个你最喜欢的。 这个只是找到每个产品的第一个行号。 然后,您只需要简单地将dense_rank()
应用于初始分组即可折叠这些孔。
with data as (
select *, min(rownum) over (partition by product) as minrow
from T
)
select dense_rank() over (order by minrow) as rownum, product
from data
order by rownum, data.rownum;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.