簡體   English   中英

SQL 僅在該值與所有先前值不同時獲取行號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM