Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Phân nhóm và đếm

Bạn có thể sử dụng như sau:

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;

Nó sử dụng ROW_NUMBER để xếp hạng từng trò chơi được phân chia theo đội và do đó, sự khác biệt giữa hai trò chơi này là duy nhất cho mỗi nhóm kết quả liên tiếp. Vì vậy, đối với nhóm đầu tiên của bạn, bạn sẽ có:

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

Trong đó RN1 chỉ được phân vùng theo nhóm và rn2 được phân vùng theo nhóm và kết quả.

Như bạn có thể thấy, nếu Bạn loại bỏ Số lỗ thì cột DIFF sẽ tăng lên một cho mỗi nhóm chiến thắng liên tiếp:

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

Sau đó, bạn có thể nhóm theo điều này để đảm bảo bạn đang xem các chiến thắng liên tiếp và đếm để đạt được nhiều nhất. Sau đó, tôi vừa sử dụng một thợ cắt dây khác để có được số trận thắng liên tiếp tối đa cho mỗi đội.

Ví dụ trên 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. Cách tốt nhất để thực hiện chèn nhiều hàng trong Oracle?

  2. Nhận danh sách các hàm và chữ ký thủ tục từ oracle

  3. SQL Oracle - Kết hợp các hàng liên tiếp với bộ lọc

  4. Làm thế nào để cập nhật tất cả các hàng ngoại trừ một hàng trong số nhiều hàng thỏa mãn điều kiện đã cho?

  5. BadImageFormatException khi sử dụng Oracle Client 64 bit và Visual Studio 2010!