Tsql 使用SQL查询确定给定结果表

Tsql 使用SQL查询确定给定结果表,tsql,Tsql,我有一个包含3列的表: id|WonTeam|LostTeam 1| t1 | t2 2| t2 | t3 3| t1 | t2 4| t3 | t2 5| t1 | t4 etc.... 我想找到那个赢得帽子戏法的队。在这里,t1赢得了帽子戏法。是否可以在单选状态下写入?基于有限的数据和详细信息,这应该有效: SELECT WonTeam FROM yourTable GROUP BY WonTeam HAV

我有一个包含3列的表:

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

我想找到那个赢得帽子戏法的队。在这里,t1赢得了帽子戏法。是否可以在单选状态下写入?

基于有限的数据和详细信息,这应该有效:

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

请参见

这提出了一些假设,这些假设在您的问题中并不明确。 我用帽子戏法来表示连续赢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

在这方面,我为第2队增加了更多的胜利,但由于这些胜利不是连续发生的,因此不算帽子戏法。

唯一的问题是我认为帽子戏法的定义是连续赢3场比赛。@Bort你可能是对的,但根据提供的数据,这应该有效。我认为Bort是对的,但没有时间戳,除非使用id,否则这是不可能确定的-这不优雅。@halfer我同意,需要有一些东西来确定游戏是连续的,但没有提供:你会给帽子戏法下定义吗?请在将来使用有意义的标题-解决这个问题的方法是什么?在浏览头版以查找感兴趣的问题时没有太大帮助:。
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