用变量按行排序

over order by rows with variable

有没有办法在下面的公式中使用变量作为动态数字,这样当对手在 id 列中发生变化时,我可以将 4game_so_ct 数字重置为零。我也尝试过按 id 排序,这显然只是按 id 排序,并没有重置数字。列 4game 是要查看的前行数,以获取 id 相同的前行数。

 sum(strikeouts) over (order by game_dt rows between 3 preceding and current row) as 4game_so_ct

我试过的

 sum(strikeouts) over (order by game_dt rows between 4game preceding and current row) as 4game_so_ct

但是很明显出错了

我有一个 table 如下所示

GAME_ID         GAME_DT HOME_TEAM_ID    AWAY_TEAM_ID    id  strikeouts  4game   test    4game_so_ct
WS1192204120    19220412    WS1              NYA      NYAWS1    4          0     0       4
BOS192204180    19220418    BOS              NYA      NYABOS    2          0    NYAWS1   2
NYA192204210    19220421    NYA              WS1      WS1NYA    1          0    NYABOS   1
NYA192204220    19220422    NYA              WS1      WS1NYA    2          1    WS1NYA   2
NYA192204230    19220423    NYA              WS1      WS1NYA    0          2    WS1NYA   0
NYA192204250    19220425    NYA              PHA      PHANYA    1          0    WS1NYA   1
NYA192204260    19220426    NYA              PHA      PHANYA    4          1    PHANYA   4
NYA192204280    19220428    NYA              BOS      BOSNYA    0          0    PHANYA   0
NYA192204290    19220429    NYA              BOS      BOSNYA    6          1    BOSNYA   6
NYA192204300    19220430    NYA              BOS      BOSNYA    4          2    BOSNYA   4
NYA192205010    19220501    NYA              BOS      BOSNYA    2          3    BOSNYA   2
NYA192205020    19220502    NYA              BOS      BOSNYA    1          4    BOSNYA   1

我希望在 4game_so_ct 列中看到的内容

GAME_ID         GAME_DT HOME_TEAM_ID    AWAY_TEAM_ID    id  strikeouts  4game   test    4game_so_ct
WS1192204120    19220412    WS1              NYA      NYAWS1    4          0     0       4
BOS192204180    19220418    BOS              NYA      NYABOS    2          0    NYAWS1   2
NYA192204210    19220421    NYA              WS1      WS1NYA    1          0    NYABOS   1
NYA192204220    19220422    NYA              WS1      WS1NYA    2          1    WS1NYA   3
NYA192204230    19220423    NYA              WS1      WS1NYA    0          2    WS1NYA   3
NYA192204250    19220425    NYA              PHA      PHANYA    1          0    WS1NYA   1
NYA192204260    19220426    NYA              PHA      PHANYA    4          1    PHANYA   5
NYA192204280    19220428    NYA              BOS      BOSNYA    0          0    PHANYA   0
NYA192204290    19220429    NYA              BOS      BOSNYA    6          1    BOSNYA   6
NYA192204300    19220430    NYA              BOS      BOSNYA    4          2    BOSNYA   10
NYA192205010    19220501    NYA              BOS      BOSNYA    2          3    BOSNYA   12
NYA192205020    19220502    NYA              BOS      BOSNYA    1          4    BOSNYA   13

语法图可能有点难以理解。但是documentation明确了window帧规范需要是常量:

<window frame preceding> ::=   
{  
    UNBOUNDED PRECEDING  
  | <unsigned_value_specification> PRECEDING  
  | CURRENT ROW  
}  
 . . .
<unsigned value specification> ::=   
{  <unsigned integer literal> }

因此,您无法使用 windows 框架规范来做您想做的事情。

你把它复杂化了。在 SUM 中使用 partition by,这是预期的结果。

sum(strikeouts) over (partition by id order by game_dt)