Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Grupowanie i liczenie

Możesz użyć:

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;

Wykorzystuje ROW_NUMBER do uszeregowania każdej gry podzielonej na drużyny, a także według wyników, różnica między tymi dwoma jest unikalna dla każdej grupy kolejnych wyników. Więc dla swojego pierwszego zespołu będziesz miał:

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

Gdzie RN1 jest po prostu podzielony według zespołu, a rn2 jest podzielony według zespołu i wyniku.

Jak widać, jeśli usuniesz straty, kolumna DIFF zwiększa się o jeden dla każdej grupy kolejnych zwycięstw:

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

Następnie możesz pogrupować według tego, aby upewnić się, że patrzysz na kolejne wygrane i liczyć, aby uzyskać jak najwięcej. Wtedy właśnie użyłem innego numeru rzędu, aby uzyskać maksymalną liczbę kolejnych zwycięstw na drużynę.

Przykład 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. Jak przekazać List z java do procedury Oracle?

  2. jak uzyskać czas w milisekundach z pola daty wyroczni dla daty 01-01-9999

  3. Oracle SQL Developer:Test nie powiódł się:Karta sieciowa nie może nawiązać połączenia?

  4. Nie można użyć nazw kolumn w zapytaniu wybierającym w sqlfiddle (Oracle)

  5. Kiedy należy używać procedur składowanych w języku Java z bazą danych Oracle… jakie są wady?