2017-09-21 54 views
1

我的樣品輸入表是:分配唯一的值到每個本地組的

x y 
1 a 
3 b 
5 b 
4 a 
2 a 
6 b 

我想獲得這樣的:

x y z 
1 a 1 
2 a 1 
3 b 2 
4 a 3 
5 b 4 
6 b 4 

首先的所有行必須由x,然後進行排序y中的每個本地值組應該都會收到其唯一編號(例如,在z中)。最後,我想分區z。儘管操作似乎非常簡單,但我無法提出查詢。

回答

1

可以使用lag(),然後累計總和做到這一點:

select x, y, 
     sum(case when y = prev_y then 0 else 1 end) over (order by x) as z 
from (select t.*, 
      lag(y) over (order by x) as prev_y 
     from t 
    ) t; 
+0

你的解決方案非常適合數據量小,但它認爲它減慢我的查詢(我使用蜂巢)在大樣本因爲整個數據必須在「一個地方」訂購。實際上'z'只能在'x'的相同值範圍內唯一,所以也許這個知識可以用來優化這個查詢? – Cob

+0

@Cob。 。 。我不確定你的評論意味着什麼。你應該問一個關於樣本數據和期望結果的問題。 –

+0

你說得對。我不夠清楚。不過,我認爲我用「PARTITION BY」解決了我的問題。 – Cob

相關問題