0

3列のテーブルがあります。

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

ハットトリックを勝ち取ったチームを探したい。たとえば、ここでt1はハットトリックを獲得しました。シングルセレクトステートメントで書くことは可能ですか?

4

2 に答える 2

1

限られたデータと詳細に基づいて、これは機能するはずです。

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

SQL FiddlewithDemoを参照してください

于 2012-07-26T17:29:54.087 に答える
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フィドルでは、チーム2に勝利を追加しましたが、連続して発生しなかったため、ハットトリックとは見なされません。

于 2012-07-26T17:48:40.460 に答える