我有一个包含 3 列的表:
id|WonTeam|LostTeam
1| t1 | t2
2| t2 | t3
3| t1 | t2
4| t3 | t2
5| t1 | t4
etc....
我想找到赢得帽子戏法的球队。例如,这里 t1 赢得了帽子戏法。是否可以在单个选择语句中编写?
我有一个包含 3 列的表:
id|WonTeam|LostTeam
1| t1 | t2
2| t2 | t3
3| t1 | t2
4| t3 | t2
5| t1 | t4
etc....
我想找到赢得帽子戏法的球队。例如,这里 t1 赢得了帽子戏法。是否可以在单个选择语句中编写?
这提出了一些从您的问题中不清楚的假设。我用“帽子戏法”来表示连续赢得 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 队添加了更多胜利,但由于它们不是连续出现的,因此它们不算作帽子戏法。
根据有限的数据和细节,这应该可行:
SELECT WonTeam
FROM yourTable
GROUP BY WonTeam
HAVING Count(WonTeam) > 2