sql >> データベース >  >> RDS >> Oracle

グループ化とカウント

    以下を使用できます:

    SELECT  Team, TotalWins, FirstWin, LastWin
    FROM    (   SELECT  Team, 
                        WL,
                        COUNT(*) TotalWins,
                        MIN("Date") FirstWin,
                        MAX("Date") LastWin,
                        ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY COUNT(*) DESC) RowNumber
                FROM    (   SELECT  Team,
                                    "Date",
                                    WL, 
                                    ROW_NUMBER() OVER(PARTITION BY Team ORDER BY "Date") - ROW_NUMBER() OVER(PARTITION BY Team, WL ORDER BY "Date") Grouping
                            FROM    T
                        ) GroupedData
                WHERE   WL = 'W'
                GROUP BY Team, WL, Grouping
            ) RankedData
    WHERE   RowNumber = 1;
    

    ROW_NUMBER を使用して、チームごとに分割された各ゲームをランク付けし、結果によってもランク付けします。これら 2 つの違いは、連続した結果のグループごとに一意です。したがって、最初のチームの場合:

    Team    Date        W/L RN1     RN2 DIFF
    Team_1  04/01/0012  W   1       1   0
    Team_1  06/01/0012  W   2       2   0
    Team_1  07/01/0012  L   3       1   2
    Team_1  14/01/0012  W   4       3   1
    Team_1  19/01/0012  W   5       4   1
    Team_1  30/01/0012  L   6       2   4
    Team_1  14/02/0012  W   7       5   2
    Team_1  17/02/0012  L   8       3   5
    Team_1  20/02/0012  W   9       6   3
    

    RN1 はチームごとに分割され、rn2 はチームと結果ごとに分割されます。

    ご覧のとおり、損失を削除すると、連続した勝利のグループごとに DIFF 列が 1 ずつ増加します。

    Team    Date        W/L RN1     RN2 DIFF
    Team_1  04/01/0012  W   1       1   0
    Team_1  06/01/0012  W   2       2   0
    ---------------------------------------
    Team_1  14/01/0012  W   4       3   1
    Team_1  19/01/0012  W   5       4   1
    ---------------------------------------
    Team_1  14/02/0012  W   7       5   2
    ---------------------------------------
    Team_1  20/02/0012  W   9       6   3
    

    次に、これでグループ化して、連続した勝利を見ていることを確認し、カウントを行って最大限に得ることができます.次に、別の行番号を使用して、チームごとの最大連続勝利を取得しました.

    SQL Fiddle の例




    1. php mysql_insert_id();動作しない

    2. Hibernateとmysqlを使用した接続が多すぎます

    3. MySQLの日付警告データが切り捨てられました

    4. C#アプリケーションでTNSNAMESファイルへの適切なパスを設定するにはどうすればよいですか?