Tsql 使用SQL查询确定给定结果表
我有一个包含3列的表: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
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