2017-05-03 41 views
0

我有一個表像下面:我該如何使用窗函數 - 困難情況下,PostgreSQL的

group sequence action   
1  1   promotion_1    
1  2   promotion_1    
1  3   promotion_2    
1  4   act1      
1  5   act1      
1  6   act2      
1  7   promotion_1    
1  8   act1         
1  9   act2      
1  10   promotion_1    
1  11   act1      
2  1   promotion_2     
2  2   act1     

我想創建一個排名,其中將展示的推廣範圍。所以我需要有晉升的相同數量和本次促銷活動後的每一個動作:

group sequence action   parameter 
1  1   promotion_1 1    
1  2   promotion_1 2    
1  3   promotion_2 3    
1  4   act1   3    
1  5   act1   3    
1  6   act2   3    
1  7   promotion_1 4    
1  8   act1   4       
1  9   act2   4    
1  10   promotion_1 5    
1  11   act1   5   
2  1   promotion_2 1    
2  2   act1   1 

我(超過()爲例)閱讀窗口功能及其可能性,但我只能創建與組排名「行動」。

回答

2
select T.*, 
     sum(case when action like 'promotion%' then 1 else 0 end) 
     over(partition by "group" order by sequence rows unbounded preceding) parameter 
    from Table T 
+0

我得到的錯誤:與高階聚集體的窗函數BY子句中需要一個框架條款。你可以幫幫我嗎? – alarson008

+0

在'按順序排序'後立即添加'無界的前面的行'或'在無界的前面的和當前行之間的行' –

+0

@ alarson008更正。感謝DuduMarkovitz – Mike

1

filter(與PostgeSQL 9.4開始)

select * 
     ,count (*) filter (where action like 'promotion%') over 
     (
      partition by "group" 
      order by  sequence 
      rows   unbounded preceding  
     ) 

from mytable T 

+-------+----------+-------------+-------+ 
| group | sequence | action | count | 
+-------+----------+-------------+-------+ 
|  1 |  1 | promotion_1 |  1 | 
|  1 |  2 | promotion_1 |  2 | 
|  1 |  3 | promotion_2 |  3 | 
|  1 |  4 | act1  |  3 | 
|  1 |  5 | act1  |  3 | 
|  1 |  6 | act2  |  3 | 
|  1 |  7 | promotion_1 |  4 | 
|  1 |  8 | act1  |  4 | 
|  1 |  9 | act2  |  4 | 
|  1 |  10 | promotion_1 |  5 | 
|  1 |  11 | act1  |  5 | 
|  2 |  1 | promotion_2 |  1 | 
|  2 |  2 | act1  |  1 | 
+-------+----------+-------------+-------+ 
+0

我有錯誤「錯誤:語法錯誤在或接近」(「位置:36」。當我複製示例代碼與篩選器從互聯網上:SELECT 計數(*)未經過濾, count(*)FILTER WHERE i <5)AS filtered FROM generate_series(1,10)AS s(i); - 我得到了同樣的錯誤信息.. – alarson008

+0

與您的版本無關您是否正在使用Redshift版本)? –

+0

嗯...我使用紅移(亞馬遜紅移) – alarson008

相關問題