Sql 计算值在连续28天内出现的次数
我是这个社区的新手,我想我需要你的帮助。 我有一个查询,显示了2019年连续28天至少攻入5球的所有球员。现在我还需要知道他们到底进了多少球,如果他们至少进了5个球的话 你可以在下面看到我已经提出的问题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 (
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天以来提交所需数量的目标时