Oracle
 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 за класиране на всяка игра, разделена по отбори, а също и по резултат, разликата между тези две е уникална за всяка група от последователни резултати. Така че за вашия първи отбор ще имате:

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 се увеличава с едно за всяка група последователни победи:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Няма потребителско име HR в Oracle 12c

  2. В кой ред операторът за актуализиране на Oracle SQL променя стойностите на колоните?

  3. oci_connect връзката неуспешна

  4. ПРОВЕРЕТЕ ОГРАНИЧЕНИЕТО на низа да съдържа само цифри. (Oracle SQL)

  5. Oracle - Импортиране на данни в таблица с различно име?