Sql 多个窗口函数的累积和V3

Sql 多个窗口函数的累积和V3,sql,postgresql,Sql,Postgresql,我有这张桌子: id | date | player_id | score | all_games | all_wins | n_games | n_wins ============================================================================================ 6747 | 2018-08-10 | 1 | 0 | 1

我有这张桌子:

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是每天最后一次游戏数量的滚动计数,即用户每天可以玩多个游戏,目前它与所有_games的行数(*)相同

另一个问题是,n_wins列只对当天的滚动窗口赢款进行求和(*),因此,如果用户在当天早些时候赢了几场游戏,则直到第二天才会将其添加到n_wins列中

我举了一个例子:

我试过这个问题

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


不要在查询中执行此操作,而是在过程代码中执行。使用光标按正确的顺序浏览行并计算所需的值。那就简单多了。SQL不是为过程性需求而设计的。感谢Laurenz的指导,我正在将它拉到Pandas中,所以我将在那里执行。不要在查询中执行此操作,请在过程性代码中执行此操作。使用光标按正确的顺序浏览行并计算所需的值。那就简单多了。SQL不是为程序性需求而设计的。感谢Laurenz的领导,我正在将它拉到Pandas中,所以我会在那里做。