Sql 计算值在连续28天内出现的次数

Sql 计算值在连续28天内出现的次数,sql,db2,Sql,Db2,我是这个社区的新手,我想我需要你的帮助。 我有一个查询,显示了2019年连续28天至少攻入5球的所有球员。现在我还需要知道他们到底进了多少球,如果他们至少进了5个球的话 你可以在下面看到我已经提出的问题 select player_id from ( select a.player_id, min(days(a.date)-days(b.date)) as time_period from ( select * from (

我是这个社区的新手,我想我需要你的帮助。 我有一个查询,显示了2019年连续28天至少攻入5球的所有球员。现在我还需要知道他们到底进了多少球,如果他们至少进了5个球的话

你可以在下面看到我已经提出的问题

select player_id from
(
  select    a.player_id, 
          min(days(a.date)-days(b.date)) as time_period
  from
  (
    select  *
    from
    (
      select    player_id, 
              date, 
              row_number() over (partition by player_id order by date asc) as goals 
      from  matches m
      where             date>date('01.01.2019')
      and       player_id<>''
    )
    where goals >=5
  ) a
  join
  (
    select  player_id, 
            date, 
            row_number() over (partition by player_id order by date asc) as goals
    from    matches m
    where       date>date('01.01.2019')
    and player_id<>'' 
  ) b
  on        a.player_id=b.player_id
  and       a.goals=(b.goals+4)
  group by  a.player_id
) Z
where time_period<=28 
上面的查询为我提供了所有在连续28天内进了5个或更多球的球员,但没有显示他们在这段时间内实际进了多少球。

试试下面的方法

select player_id,total_goal from
(
  select    a.player_id, sum(a.goals) as total_goal,
          min(days(a.date)-days(b.date)) as time_period
  from
  (
    select *
    from
    (
      select    player_id, 
              date, 
              row_number() over (partition by player_id order by date asc) as goals 
      from  matches m
      where             date>date('01.01.2019')
      and       player_id<>''
    )
    where goals >=5
  ) a
  join
  (
    select  player_id, 
            date, 
            row_number() over (partition by player_id order by date asc) as goals
    from    matches m
    where       date>date('01.01.2019')
    and player_id<>'' 
  ) b
  on        a.player_id=b.player_id
  and       a.goals=(b.goals+4)
  group by  a.player_id
) Z
where time_period<=28 

考虑以下示例:

select *
from 
(
  select 
    d, player_id
  , count(1) over (partition by player_id order by days(d) range between 28 preceding and current row) as goals
  from
  (
  values
    (date('2019-01-01'), 1)
  , (date('2019-01-28'), 1)
  , (date('2019-02-01'), 1)
  , (date('2019-02-02'), 1)
  ) t(d, player_id)
)
--where goals>=2
;

D          PLAYER_ID GOALS
---------- --------- -----
2019-01-01         1     1
2019-01-28         1     2
2019-02-01         1     2
2019-02-02         1     3
“目标”列包含相对于每个玩家id的D列中的日期不超过28天的前几天的目标计数。每个玩家可能有多个日期,如示例所示,当玩家自过去28天以来提交所需数量的目标时