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はハットトリックを獲得しました。シングルセレクトステートメントで書くことは可能ですか?
限られたデータと詳細に基づいて、これは機能するはずです。
SELECT WonTeam
FROM yourTable
GROUP BY WonTeam
HAVING Count(WonTeam) > 2
SQL FiddlewithDemoを参照してください
これは、あなたの質問からは明らかではなかったいくつかの仮定をします。私は「ハットトリック」とは、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フィドルでは、チーム2に勝利を追加しましたが、連続して発生しなかったため、ハットトリックとは見なされません。