0

我有一个包含 3 列的表:

   id|WonTeam|LostTeam
    1| t1    | t2
    2| t2    | t3
    3| t1    | t2
    4| t3    | t2
    5| t1    | t4
    etc....

我想找到赢得帽子戏法的球队。例如,这里 t1 赢得了帽子戏法。是否可以在单个选择语句中编写?

4

2 回答 2

1

这提出了一些从您的问题中不清楚的假设。我用“帽子戏法”来表示连续赢得 3 场比赛。由于没有任何时间戳,我还假设它Id给出了时间顺序。这个查询感觉有点笨拙,我觉得应该有一种方法可以收紧它,但它确实有效。基本上,对于每条记录,我都会计算自最近一次失败以来的获胜次数。如果这是> = 3,你有一个帽子戏法。

SELECT DISTINCT(R.Win) FROM Results R
CROSS APPLY (
    SELECT COUNT(*) AS WinStreak
    FROM Results T
    WHERE T.Win = R.Win AND T.Id <= R.Id
        AND T.Id >= (
            SELECT ISNULL(MAX(Id), T.Id)
            FROM Results S
            WHERE S.Lose = R.Win AND S.Id <= R.Id
        )
) X
WHERE X.WinStreak >= 3

在这个SQL Fiddle中,我为第 2 队添加了更多胜利,但由于它们不是连续出现的,因此它们不算作帽子戏法。

于 2012-07-26T17:48:40.460 回答
1

根据有限的数据和细节,这应该可行:

SELECT WonTeam
FROM yourTable
GROUP BY WonTeam
HAVING Count(WonTeam) > 2

请参阅带有演示的 SQL Fiddle

于 2012-07-26T17:29:54.087 回答