2017-12-02 4 views
0

このテーブルの最後の列に最も簡単に取り込む方法を理解しようとすると、結果値の実行を格納するstreak列(winまたはlossのいずれか)が表示されます。postgres:SQLとスジ?

game_date | team | result | streak 
------------+---------+--------+-------- 
2017-10-05 | ABC  | win | 1 
2017-10-07 | ABC  | win | 2 
2017-10-11 | ABC  | loss | 1 
2017-10-14 | ABC  | win | 1 
2017-10-15 | ABC  | win | 2 
2017-10-18 | ABC  | win | 3 
2017-10-21 | ABC  | win | 4 
2017-10-23 | ABC  | loss | 1 
2017-10-24 | ABC  | win | 1 
2017-10-26 | ABC  | win | 2 
2017-10-28 | ABC  | win | 3 
2017-10-30 | ABC  | loss | 1 
2017-11-02 | ABC  | win | 1 
2017-11-04 | ABC  | loss | 1 
2017-11-07 | ABC  | win | 1 
2017-11-09 | ABC  | loss | 1 
2017-11-12 | ABC  | loss | 1 
2017-11-14 | ABC  | loss | 2 
2017-11-16 | ABC  | loss | 3 
2017-11-18 | ABC  | win | 1 
2017-11-19 | ABC  | loss | 1 
2017-11-22 | ABC  | loss | 2 
2017-11-24 | ABC  | loss | 3 
2017-11-25 | ABC  | win | 1 
2017-11-28 | ABC  | win | 2 
2017-11-30 | ABC  | win | 3 
2017-12-01 | ABC  | win | 4 
(27 rows) 

見ての通り前に結果がそうでなければ1ずつ増加、ヌル、または異なる場合、streakは1にリセットする必要があります。

答えて

0

row_numbers()の差異を使用して結果値の「島」を識別することによって、勝敗の順序を特定することができます。残りは単なる最終用途です。row_number()

select g.*, 
     row_number() over (partition by seqnum - seqnum_r, result order by game_date) as streak 
from (select g.*, 
      row_number() over (order by game_date) as seqnum, 
      row_number() over (partition by result order by game_date) as seqnum_r 
     from games g 
    ) g 
関連する問題