多个窗函数V3的累积和

时间:2019-09-16 07:49:22

标签: sql postgresql

我有这张桌子:

id    |     date       | player_id  | score | all_games | all_wins     |    n_games  | n_wins
============================================================================================
6747  |   2018-08-10 |      1       |   0   |   1       |              |    1        |      
6751  |     2018-08-10 |    1       |   0   |   2       |   0          |    2        |      
6764  |     2018-08-10 |    1       |   0   |   3       |   0          |    3        |      
6783  |     2018-08-10 |    1       |   0   |   4       |   0          |    4        |      
6804  |     2018-08-10 |    1       |   0   |   5       |   0          |    5        |      
6821  |     2018-08-10 |    1       |   0   |   6       |   0          |    6        |      
6828  |     2018-08-10 |    1       |   0   |   7       |   0          |    7        |      
17334 |     2018-08-23 |    1       |   0   |   8       |   0          |    8        |      0
17363 |     2018-08-23 |    1       |   0   |   9       |   0          |    9        |      0
17398 |     2018-08-23 |    1       |   0   |   10      |   0          |    10       |      0
17403 |     2018-08-23 |    1       |   0   |   11      |   0          |    11       |      0
17409 |     2018-08-23 |    1       |   0   |   12      |   0          |    12       |      0
33656 |     2018-09-13 |    1       |   0   |   13      |   0          |    13       |      0
33687 |     2018-09-13 |    1       |   0   |   14      |   0          |    14       |      0
45393 |     2018-09-27 |    1       |   0   |   15      |   0          |    15       |      0
45402 |     2018-09-27 |    1       |   0   |   16      |   0          |    16       |      0
45422 |     2018-09-27 |    1       |   1   |   17      |   0          |    17       |      0
45453 |     2018-09-27 |    1       |   0   |   18      |   1          |    18       |      0
45461 |     2018-09-27 |    1       |   0   |   19      |   1          |    19       |      0
45474 |     2018-09-27 |    1       |   0   |   20      |   1          |    20       |      0
57155 |     2018-10-11 |    1       |   0   |   21      |   1          |    21       |      1
57215 |     2018-10-11 |    1       |   0   |   22      |   1          |    22       |      1
57225 |     2018-10-11 |    1       |   0   |   23      |   1          |    23       |      1
69868 |     2018-10-25 |    1       |   0   |   24      |   1          |    24       |      1

我现在需要解决的问题是,我需要n_games作为每天的最后游戏数量的滚动计数,即用户每天可以玩多个游戏,因为目前它与row_number( *)超过all_games

另一个问题是,n_wins列仅在当天赢得滚动窗口的总和(*),因此,如果用户在当天早些时候赢得了几场比赛,则不会将其添加到n_wins列中直到第二天。

我有一个示例DEMO

我已经尝试过该查询

SELECT id,
   date,
   player_id,
   score,
   row_number(*) OVER all_races AS all_games,
   sum(score) OVER all_races AS all_wins,
   row_number(*) OVER last_n AS n_games,
   sum(score) OVER last_n AS n_wins
  FROM scores  
 WINDOW 
 all_races AS (PARTITION BY player_id ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 
 last_n AS (PARTITION BY player_id ORDER BY date ASC RANGE BETWEEN interval '7 days' PRECEDING AND interval '1 day' PRECEDING);

理想情况下,我需要一个查询,该查询将输出类似于此表的内容

id    |     date       | player_id  | score | all_games | all_wins     |    n_games  | n_wins
============================================================================================
6747  |   2018-08-10 |      1       |   0   |   1       |              |    1       |   
6751  |     2018-08-10 |    1       |   0   |   2       |   0          |    2       |   
6764  |     2018-08-10 |    1       |   0   |   3       |   0          |    3       |       
6783  |     2018-08-10 |    1       |   0   |   4       |   0          |    4       |   
6804  |     2018-08-10 |    1       |   0   |   5       |   0          |    5       |   
6821  |     2018-08-10 |    1       |   0   |   6       |   0          |    6       |   
6828  |     2018-08-10 |    1       |   0   |   7       |   0          |    7       |   
17334 |     2018-08-23 |    1       |   0   |   8       |   0          |    1       |   0
17363 |     2018-08-23 |    1       |   0   |   9       |   0          |    2       |   0
17398 |     2018-08-23 |    1       |   0   |   10      |   0          |    3       |   0
17403 |     2018-08-23 |    1       |   0   |   11      |   0          |    4       |   0
17409 |     2018-08-23 |    1       |   0   |   12      |   0          |    5       |   0
33656 |     2018-09-13 |    1       |   1   |   13      |   1          |    6       |   0
33687 |     2018-09-13 |    1       |   0   |   14      |   1          |    7       |   1
45393 |     2018-09-27 |    1       |   0   |   15      |   1          |    1       |   1
45402 |     2018-09-27 |    1       |   0   |   16      |   1          |    2       |   1
45422 |     2018-09-27 |    1       |   1   |   17      |   1          |    3       |   1
45453 |     2018-09-27 |    1       |   0   |   18      |   2          |    4       |   2
45461 |     2018-09-27 |    1       |   0   |   19      |   2          |    5       |   2
45474 |     2018-09-27 |    1       |   0   |   20      |   2          |    6       |   1
57155 |     2018-10-11 |    1       |   0   |   21      |   2          |    7       |   1
57215 |     2018-10-11 |    1       |   0   |   22      |   2          |    1       |   1
57225 |     2018-10-11 |    1       |   0   |   23      |   2          |    2       |   1
69868 |     2018-10-25 |    1       |   0   |   24      |   2          |    3       |   1

0 个答案:

没有答案