我需要找到某事的第N个实例

时间:2019-03-23 22:25:31

标签: tsql

我正在编写一个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分钟出现了第三个客位。

2 个答案:

答案 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'

您将为客队创建类似的东西...