使用SQL查询确定获胜者给定结果表

时间:2012-07-26 17:24:30

标签: tsql

我有一个包含3列的表格:

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

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

2 个答案:

答案 0 :(得分:1)

基于有限的数据和细节,这应该有效:

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

请参阅SQL Fiddle with Demo

答案 1 :(得分: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队增加了更多的胜利,但由于它们没有连续发生,所以它们不算是帽子戏法。