我正在编写一个T-SQL数据库,以帮助我通过足球(足球)统计信息识别趋势。
每次比赛我都有几行数据,每一行表示一个事件,例如进球或弯道。
我正在努力找出谁在每场比赛中赢得3、5、7和9个角球的角逐比赛。
我什至无法想到一种用于此目的的方法。有人可以帮忙吗?
我尝试查看case语句和临时表,但找不到找到想要的方法
数据看起来像这样
Event Team Time (mins)
corner home 32
corner home 78
corner away 86
corner home 12
corner away 89
corner away 36
所以我想找到每个主角的第3,第5,第7和第9实例(如果有的话),而远离的拐角都相同。因此,如果有道理,则每个类别的两次比赛中的较低者将赢得比赛。
在上面的示例中,主队赢得比赛,因为它在第78分钟出现了第三个角球,而第89分钟出现了第三个客位。
答案 0 :(得分:0)
使用此查询:
select e.*,
(select count(*) from events
where team = e.team and event = e.event and time < e.time) + 1 counter
from events e
order by e.time
您将按时间顺序获取所有事件,并且对于每个事件,直到该时间为止都有一个计数器。
您可以像这样使用它:
select top 1 t.team
from (
select e.*,
(select count(*) from events
where team = e.team and event = e.event and time < e.time) + 1 counter
from events e
) t
where event = 'corner' and counter = 3
order by t.time
获得3个角的获胜团队。
参见demo。
答案 1 :(得分:0)
对于主队来说是这样的:
选择前9 * *从Your_Table ROW_NUMBER()超过(按时间排序)AS RowNum WHERE RowNum = 3 OR RowNum = 5 OR RowNum = 7 OR RowNum = 9 AND Team ='Home'
您将为客队创建类似的东西...