0
我試圖通過多個類別跟蹤不同的路徑。我的表的簡化圖如下所示:SQL Server row_number()通過分區,但忽略重複的分類值
Table: customer_category
CustomerID | Category | Date
11111 | A | 2016-01-01
11111 | B | 2016-02-01
11111 | C | 2016-03-01
22222 | A | 2016-01-01
22222 | A | 2016-02-01
22222 | A | 2016-03-01
22222 | C | 2016-04-01
33333 | A | 2016-01-01
33333 | B | 2016-02-01
33333 | C | 2016-03-01
33333 | C | 2016-04-01
我可以通過這個查詢找到絕對路徑:
with cat_order as (
select CustomerID
,Category
,row_number() over (partition by CustomerID order by Date) as rnk
from customer_category
),pivot as (
select CustomerID
,max(case when rnk = 1 then Category else null end) as category_1
,max(case when rnk = 2 then Category else null end) as category_2
,max(case when rnk = 3 then Category else null end) as category_3
,max(case when rnk = 4 then Category else null end) as category_4
from cat_order
group by CustomerID
)
select category_1, category_2, category_3, category_4, count(*) as count
from pivot
group by category_1, category_2, category_3, category_4
;
這使我有以下幾點:
category_1 | category_2 | category_3 | category_4 | count
A | B | C | | 1
A | A | A | C | 1
A | B | C | C | 1
我想要什麼,雖然是忽略重複的類別,這樣我就看到
category_1 | category_2 | category_3 | category_4 | count
A | B | C | | 2
A | C | | | 1
在我的頭上,我想我會需要到
- 省略任何記錄,其中類別=滯後(類別)
- 排名在分區...
- 支點與case語句
- 彙總結果
感覺方式過於複雜。有沒有更簡單的方法來做到這一點?
你是什麼意思忽略重複類別..所有1,2,3,4?在你的結果中,你從category2中得到了一個c,但是基礎沒有。 –
當我說'重複類別'時,我正在研究消費者22222是如何經歷AAA C序列的。我不關心他們是否屬於A類中的三種不同測量,只是它們是A,然後是C (沒有通過B類),而另外兩個從A→B→C進展 –