0

次のスキーマを持つクリケット データベースがあります。

Bowl(BowlID, MatchID, Striker, Non-Striker, Bowler, Runs, OverNum)
 - Stores info for every ball
Match(MatchID, Team1, Team2, Date)
 - Stores all the matches

私は、試合の最後から 2 番目のボールの何パーセントが特定のラン数を記録するかを計算しようとしています。

最初に、各試合の最後から 2 番目のボールを取得する必要があります。どうすればいいのか本当にわかりません。OverNum 列にはボール番号が格納されるため、20 試合の場合、これは '0.1' から始まり、'19.6' まで上がります (彼らがイニングを最後まで続けたと仮定します)。

それは次のようなものでしょうか:

SELECT MatchID, MAX(OverNum) 
FROM Bowl 
WHERE OverNum 
NOT IN (SELECT Max(OverNum) FROM Bowl)
GROUP BY MatchID

ボウル テーブル全体から 2 番目に高い OverNum ではなく、各試合の最後から 2 番目の値を取得するように頭を悩ませることはできません...

4

3 に答える 3

0

最後から 2 番目のボールを取得するには、これを使用します。

select *
from (
   select matchid, overnum,
          row_number() over (partition by matchid order by overnum desc) as rn
   from bowl
) t
where rn = 2;

使用している DBMS については言及していません。上記は ANSI 標準 SQL であり、最新のほぼすべての DBMS でサポートされています。

于 2012-09-19T11:13:54.000 に答える
0

私は、試合の最後から 2 番目のボールの何パーセントが特定のラン数を記録するかを計算しようとしています。

これらの行の何か:

SELECT 
    -- Consider each case where the runs scored on the
    -- penultimate ball is what you wanted as a '1' and rest as '0'
    (SUM(CASE Runs 
        WHEN @needed THEN 1
        ELSE 0
    END) * 100) / SUM(1),
FROM 
    Bowl b1
    JOIN 
    (
        // Penultimate ball in a given match.
        SELECT bNextMax.MatchId, Max(CONVERT(REAL, bNextMax.OverNum)) 
        FROM 
            Bowl bNextMax
            JOIN (
                SELECT MatchId, MAX(CONVERT(REAL, OverNum)) OverNum
                FROM Bowl 
                GROUP BY MatchID
            ) as bMax
            ON bNextMax.MatchID = bMax.MatchID AND bNextMax.OverNum != bMax.OverNum
    ) b2
    ON b1.MatchID = b2.MatchID AND b1.OverNum = b2.OverNum
于 2012-09-19T11:14:41.157 に答える
0

少し複雑な内部クエリを使用する必要があります。もちろん、SQL Server を使用していると仮定していますが、実際には Oracle の方が少し簡単かもしれません。

select * from Bowl b
where OverNum = 
(
    select top 1 OverNum from 
    (
        select top 2 OverNum 
        from Bowl 
        where Bowl.MatchID = b.MatchID 
        order by OverNum desc
    ) top2 
    order by OverNum asc
)
于 2012-09-19T11:32:19.593 に答える