我有一个包含3列的表格:
id|WonTeam|LostTeam
1| t1 | t2
2| t2 | t3
3| t1 | t2
4| t3 | t2
5| t1 | t4
etc....
我想找到赢得帽子戏法的球队。例如,这里t1赢了帽子戏法。是否可以用单一选择语句写出来?
答案 0 :(得分:1)
基于有限的数据和细节,这应该有效:
SELECT WonTeam
FROM yourTable
GROUP BY WonTeam
HAVING Count(WonTeam) > 2
答案 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队增加了更多的胜利,但由于它们没有连续发生,所以它们不算是帽子戏法。