![](/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.